Bases de datos

SQL Azure FAQ

DB: Eduardo Castro - 6 March, 2010 - 18:33

SQL Azure es SQL SQL Server en la nube, para aquellos que inician con SQL Azure estas son las respuestas a las FAQ más comunes:

  1. El tamaño máximo de las bases de datos es 1GB o 10GB, dependiendo de su suscripción, si necesita almacenar más datos deberá crear Shards http://en.wikipedia.org/wiki/Shard_%28database_architecture%29
  2. Se pueden crear todas las bases de datos que desee, pero no necesariamente estarán en el mismo servidor, esto debido al modelo de balance de carga de SQL Azure
  3. No se pueden hacer consultas entre base de datos ni entre servidores
  4. No hay Transparent Data Encryption
  5. Soporta un subconjunto muy completo de T-SQL pero no todos, http://blogs.msdn.com/ssds/archive/2009/07/07/9823115.aspx
  6. Soporta un subconjunto de SQL Types pero no todos, http://blogs.msdn.com/ssds/archive/2009/07/07/9823115.aspx

 

For those who are starting with SQL Azure, these are the answers to most common FAQ:

 

  • Database maximum size is 1GB or 10GB based on your price plan, if you need to handle larger databases you must use Shards
  •     http://en.wikipedia.org/wiki/Shard_%28database_architecture%29

  • Unlimited number of databases, but they may not be on the same server, this is because the SQL Azure Balancing Mode
  • Currently you cannot do cross-database querying
  • There is no TDE in SQL Azure 
  • It supports a subset of SQL Server’s T-SQL commands, more detail in http://blogs.msdn.com/ssds/archive/2009/07/07/9823115.aspx
  • It supports a subset of SQL Server’s datatypes, more detail in http://blogs.msdn.com/ssds/archive/2009/07/07/9823115.aspx
  •  

    Saludos,

    Ing. Eduardo Castro Martínez, PhD – Microsoft SQL Server MVP

    http://mswindowscr.org

    http://comunidadwindows.org

    Costa Rica

    Technorati Tags: SQL Server

    LiveJournal Tags: SQL Server

    del.icio.us Tags: SQL Server

    http://ecastrom.blogspot.com

    http://ecastrom.wordpress.com

    http://ecastrom.spaces.live.com

    http://universosql.blogspot.com

    http://todosobresql.blogspot.com

    http://todosobresqlserver.wordpress.com

    http://mswindowscr.org/blogs/sql/default.aspx

    http://citicr.org/blogs/noticias/default.aspx

    http://sqlserverpedia.blogspot.com/


    Categorías: Bases de datos

    Ajuste (tuning) del rendimiento de SQL Server 2008

    DB: Eduardo Castro - 23 February, 2010 - 22:54

    En el siguiente webcast Ajuste (tuning) del rendimiento de SQL Server 2008 http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032438450&Culture=es-AR analizamos las herramientas de desempeño de SQL Server 2008 y cómo utilizarlas.

    La presentación pueden descargarla de la siguiente dirección http://cid-bf30da8b3fc2e667.skydrive.live.com/self.aspx/Comunidad%20Windows%20Costa%20Rica/WebCast/SQL2008Performance.pdf

     

    Ajuste (tuning) del rendimiento de SQL Server 2008 View more presentations from Eduardo Castro.

     

    Los scripts utilizados en la presentación son los siguientes:

     

    – memory

    SELECT type, SUM(single_pages_kb)
    FROM sys.dm_os_memory_clerks
    GROUP BY type
    ORDER BY SUM(single_pages_kb) DESC

    SELECT type, SUM(multi_pages_kb)
    FROM sys.dm_os_memory_clerks
    WHERE multi_pages_kb != 0
    GROUP BY type
    ORDER BY SUM(multi_pages_kb) DESC

    –querys
    select text, query_plan, requested_memory_kb, granted_memory_kb, used_memory_kb from sys.dm_exec_query_memory_grants MG
    CROSS APPLY sys.dm_exec_sql_text(sql_handle)  t
    CROSS APPLY sys.dm_exec_query_plan
    (MG.plan_handle)

    –buffer pool usage by database
    select db_name(database_id) as dbName,
    count(*)*8/1024 as BufferPoolMB
      from sys.dm_os_buffer_descriptors
       group by db_name(database_id)
       order by 2 desc

    –IO

    select   session_id, wait_duration_ms,
      resource_description
          from    sys.dm_os_waiting_tasks
          where   wait_type like ‘PAGE%LATCH_%’
           and              resource_description like ‘2:%’

    –PAGE I/O* Waits
      (select * from sys.dm_os_wait_stats
       where wait_type like ‘%PAGEIO%’)

    –Virtual File Stats

       (select * from
       sys.dm_io_virtual_file_stats(-1, -1))

     

    select * from     sys.dm_exec_sessions

    select * from         sys. dm_io_pending_io_requests

    select * from           sys.dm_os_ring_buffers

    select * from          sys.dm_os_sys_info

    select * from          sys.dm_os_wait_stats

    –CPU

    select * from sys.dm_os_ring_buffers

    where

    ring_buffer_type=’RING_BUFFER_RESOURCE_MONITOR’

    select * from sys.dm_os_ring_buffers

    where

    ring_buffer_type=’RING_BUFFER_SINGLE_PAGE_ALLOCATOR’

     

    Saludos,

    Ing. Eduardo Castro Martínez, PhD – Microsoft SQL Server MVP

    http://mswindowscr.org

    http://comunidadwindows.org

    Costa Rica

    Technorati Tags: SQL Server

    LiveJournal Tags: SQL Server

    del.icio.us Tags: SQL Server

    http://ecastrom.blogspot.com

    http://ecastrom.wordpress.com

    http://ecastrom.spaces.live.com

    http://universosql.blogspot.com

    http://todosobresql.blogspot.com

    http://todosobresqlserver.wordpress.com

    http://mswindowscr.org/blogs/sql/default.aspx

    http://citicr.org/blogs/noticias/default.aspx

    http://sqlserverpedia.blogspot.com/


    Categorías: Bases de datos

    Qué versión de SQL Server debo utilizar Enterprise o Standard o Datacenter

    DB: Eduardo Castro - 17 February, 2010 - 23:08

    Para aquellos que deben decidir cuál es el tipo de licenciamiento que tienen que utilizar para SQL Server, la mejor forma de elegir la versión adecuada es comparando las capacidades de cada una de estas versiones, en la siguiente tabla se presenta una comparación reducida de las dos principales versiones de SQL Server:

     

    image

    El detalle completo de la comparación de capacidades puede ser encontrada en el siguiente documento http://download.microsoft.com/download/2/D/F/2DF66C0C-FFF2-4F2E-B739-BF4581CEE533/SQLServer2008EnterpriseandStandardFeature%20Compare.pdf

     

    Sin embargo, si la aplicación necesita alta disponibilidad, manejo de grandes cantidades de recursos tales como memory y gran cantidad de procesadores, entonces deben elegir la versión Enterprise y si van a ejecutar SQL Server sobre máquinas con con cientos de procesadores y más de 64GB en ram deben empezar a considerar SQL Server 2008 R2 Data Center Edition, el cual posee las siguiente características:

     

    - Soporte de hasta 256 procesadores lógicos
    - Administración central de más de 25 instancias de SQL Server
    - Soporte de hasta 2 TB de memoria cuando se ejcuta sobre Windows Server 2008 R2 Datacenter

     

    Saludos,

    Ing. Eduardo Castro Martínez, PhD – Microsoft SQL Server MVP

    http://mswindowscr.org

    http://comunidadwindows.org

    Costa Rica

    Technorati Tags: SQL Server

    LiveJournal Tags: SQL Server

    del.icio.us Tags: SQL Server

    http://ecastrom.blogspot.com

    http://ecastrom.wordpress.com

    http://ecastrom.spaces.live.com

    http://universosql.blogspot.com

    http://todosobresql.blogspot.com

    http://todosobresqlserver.wordpress.com

    http://mswindowscr.org/blogs/sql/default.aspx

    http://citicr.org/blogs/noticias/default.aspx

    http://sqlserverpedia.blogspot.com/


    Categorías: Bases de datos

    SQL Server Enterprise Edition y BizTalk Server Enterprise Edition: La historia de mejor juntos"

    DB: Eduardo Castro - 17 February, 2010 - 22:29

    Los invito a que vean este webcast en cual analizamos cuáles son las consideraciones sobre SQL Server que deben tomarse en cuenta para una impletación exitosa de la capa de datos de Biztalk Server 2009. En esta analizamos cuáles son las ventajas de utilizar SQL Server Enterprise Edition.

     

    Pueden acceder el contenido en la siguiente dirección

    http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=es-AR&EventID=1032438440&CountryCode=AR

     

    Saludos,

    Ing. Eduardo Castro Martínez, PhD – Microsoft SQL Server MVP

    http://mswindowscr.org

    http://comunidadwindows.org

    Costa Rica

    Technorati Tags: SQL Server

    LiveJournal Tags: SQL Server

    del.icio.us Tags: SQL Server

    http://ecastrom.blogspot.com

    http://ecastrom.wordpress.com

    http://ecastrom.spaces.live.com

    http://universosql.blogspot.com

    http://todosobresql.blogspot.com

    http://todosobresqlserver.wordpress.com

    http://mswindowscr.org/blogs/sql/default.aspx

    http://citicr.org/blogs/noticias/default.aspx

    http://sqlserverpedia.blogspot.com/


    Categorías: Bases de datos

    Son aquellas pequeñas cosas…

    BD: Blog de CarlosAl - 12 February, 2010 - 16:54

    Y, claro, esta entrada tampoco tiene nada que ver con la canción de Serrat.

    Es acerca de un ‘mail’ que me ha llegado recientemente:

    Carlos, soy un lector “esporádico” de tu blog y por estos tiempos me encuentro
    desarrollando en Teradata luego de haber pasado muchos años con Oracle. No deja
    de sorprenderme (como a muchos otros) la cantidad de “pequeños detalles” que
    hacen diferentes a ambas bases de datos en cuanto a sintaxis y resultados. Por
    ejemplo,
    La sentencia en ORA :

    SELECT CASE WHEN '' = 0 THEN 'A' ELSE 'B' END FROM DUAL

    Arroja como resultado ‘B’ (como era de esperar).

    Hete aquí que en ejecutando desde el Assistant en Teradata el resultado es otro: ‘A’
    ¿Por qué? ¿Algún “casteo” implícito de utilitario? Si me pudieras dar una respuesta te lo agradecería.

    Saludos,

    En efecto,esta es una de ‘aquellas pequeñas cosas’ que a veces se nos pueden llegar a atragantar al pasar de un RDBMS a otro. Y sí, algo tiene que ver con el ‘cast‘, pero no sólo con eso.

    Vamos primero con el Oracle:

    La razón aquí es la pura y simple lógica trivaluada (TRUE, FALSE, NULL) y de que para Oracle una cadena vacía (”) es NULL. Ojo a esto, porque es una particularidad de Oracle.

    Así pues, lo que está ocurriendo es que la comparación realizada es 0=NULL?=>NULL, con lo que el CASE devuelve el ELSE (‘B’).

    Pero en Teradata las cosas no son así. Primero, la cadena vacía no es un NULL:

    BTEQ -- Enter your DBC/SQL request or BTEQ command: SELECT TYPE(''); *** Query completed. One row found. One column returned. *** Total elapsed time was 1 second. Type('') --------------------------------------- VARCHAR(0) CHARACTER SET UNICODE BTEQ -- Enter your DBC/SQL request or BTEQ command: SELECT 1 WHERE '' IS NULL; *** Query completed. No rows found. *** Total elapsed time was 1 second.

    Como se demuestra aquí, para Teradata la cadena vacía es de tipo VARCHAR(0) y no es NULL.

    Pues ya sólo queda saber por qué para Teradata la cadena vacía (”) es igual a cero. Y ahí sí que entra el juego el ‘casting‘ o, más concretamente, las conversiones implícitas.

    Esto lo aclara la documentación oficial de Teradata: ‘SQL Functions, Operators, Expressions, and Predicates‘, capítulo 4: ‘Comparison Operators. Implicit Type Conversion of Comparison Operands‘:

    Data Types on Which Implicit Conversion is Performed
    If operand data types differ, then Teradata Database performs an implicit conversion according to the following table. Implicit conversions are Teradata extensions to the ANSI SQL:2008 standard.

    IF one expression   AND the other expression   THEN Teradata Database operand is …        operand is …               compares the data as ... Character           BYTEINT FLOAT SMALLINT INTEGER FLOAT

    Y eso es todo: Teradata convierte ” (VARCHAR(0)) a float, y el valor que asigna en la conversión es cero (0). En realidad, convertirá la cadena vacía a 0 para cualquier tipo de dato numérico :

    BTEQ -- Enter your DBC/SQL request or BTEQ command: SELECT CAST( '' AS FLOAT); *** Query completed. One row found. One column returned. *** Total elapsed time was 1 second. '' ---------------------- 0.00000000000000E 000 BTEQ -- Enter your DBC/SQL request or BTEQ command: SELECT CAST( '' AS integer); *** Query completed. One row found. One column returned. *** Total elapsed time was 1 second. '' ----------- 0

    Y así la comparación ” = 0 será cierta:

    BTEQ -- Enter your DBC/SQL request or BTEQ command: SELECT 1 WHERE '' = 0; *** Query completed. One row found. One column returned. *** Total elapsed time was 1 second. 1 ---- 1

    con lo que el CASE interpreta 0=0 THEN ‘A’.

    Saludos.

    Carlos


    Categorías: Bases de datos

    Aplicaciones no compatibles con esquemas en SQL Server

    DB: Eduardo Castro - 23 January, 2010 - 22:35

    Cuando se tiene una aplicación legada que no soporta esquemas, se pueden utilizar los sinónimos, el siguiente código muestra cómo crear un sinónimo en la base de datos de AdventureWorks.

     

    CREATE SYNONYM Product
    FOR Production.Product

    SELECT
        ProductID,
        Name,
        ProductNumber
    FROM
        Product

    drop synonym product

     

    Saludos,

    Ing. Eduardo Castro Martínez, PhD – Microsoft SQL Server MVP

    http://mswindowscr.org

    http://comunidadwindows.org

    Costa Rica

    Technorati Tags: SQL Server

    LiveJournal Tags: SQL Server

    del.icio.us Tags: SQL Server

    http://ecastrom.blogspot.com

    http://ecastrom.wordpress.com

    http://ecastrom.spaces.live.com

    http://universosql.blogspot.com

    http://todosobresql.blogspot.com

    http://todosobresqlserver.wordpress.com

    http://mswindowscr.org/blogs/sql/default.aspx

    http://citicr.org/blogs/noticias/default.aspx

    http://sqlserverpedia.blogspot.com/


    Categorías: Bases de datos

    Sharding de base de datos en SQL Azure

    DB: Eduardo Castro - 22 January, 2010 - 21:55

    SQL Azure permite crear múltiples bases de datos de forma sencilla y rápida. Para poder aumentar la escalabilidad de las aplicaciones es necesario poder aumentar la capacidad de manejo de datos de forma casi lineal. Para poder lograr esto podemos recurir a la capacidad de creación dinámica de base de datos en SQL Azure y de esa forma poder distribuir los datos de una única base de datos en múltiples bases de datos, esta técnica es conocida como Database Sharding.

    Existen diferentes técnicas para hacer Database Sharding entre estas están:

    • Particionamiento basado en rangos. En esta técnica se divide una única tabla en varios servidores, para esto se debe utilizar un algoritmo que permita dividir los datos de forma uniforme y predicible. El criterio para dividir debe procurar que la división de los datos sea balanceada, por ejemplo si se divide por estado entonces podría que un estado tenga más datos que otro y la división no será balanceada.
    • Particionamiento vertical. Esta técnica implica asignar o almacenar tablas grandes en base de datos distintas, por ejemplo, una BD tiene la tabla de clientes, otra BD tiene la tabla de órdenes y otra BD la tabla de imágenes. En esta técnica el problema surge si la tabla de clientes crece mucho, entonces en este caso deberemos utilizar particionamiento por rangos.
    • Particionamiento basados en llaves artificiales o hash. En este caso uno o más atributos o columnas de la tabla son utilizados en una función de hash que permite asignar una llave con base de la cual se hace la división de los datos. El único detalle a considerar con esta técnica es que tenemos que saber de antemano la cantidad de base de datos que deseamos crear ya que es un parámetro utilizado en la función de hash.
    • Pariticionamiento dinámico. Esta técnica también conocida como particionamiento por directorios implica la creación de una función del tipo ObtenerServidorDe, esto significa que en la capa de acceso a datos se llama a esta función para determinar en cual base de datos se encuentra el registro que deseamos obtener. Esta técnica es la más dinámica de todas puesto que podemos agregar o quitar bases de datos sin que se afecte al resto de la arquitectura de la aplicación.
    • Particionamiento aleatorio. Similar al particionamiento dinámico con la única diferencia de que utiliza algoritmos aleatorios para asignar un registro a una base de datos determinada.

    Un ejemplo de pseudocódigo de particionamiento dinámico sería el siguiente:

    string connectionString = ObtenerServidorDe(idOrden);

    SqlConnection conn = new SqlConnection (connectionString);

    conn.Open();

    SqlCommand cmd = new SqlCommand("….”);

     

    Algunas consideraciones al utilizar el Sharding son las siguientes:

     

    • Cómo manejar la integridad referencial. Debido a que no se soporta integridad referencial entre servidores, es necesario que la capa de acceso a datos realice las verificaciones de integridad referencial, aunque esto implica más código y tiempo de desarrollo, nos asegura la integridad de los datos.
    • Rebalanceo de particionamiento. Se puede dar el caso de que en primera instancia se utiliza un modelo de particionamiento pero después hay que cambiarlo, en este caso la técnica de particionamiento dinámico es la más factible, aunque es un punto único de fallo, lo más recomendado es utilizar un Azure Worker Role para implementar este tipo de particionamiento.
    • Consultas entre tablas relacionados. Al momento de utilizar sharding ya no será posible realizar consultas que unan tablas en distintas base de datos, para hacer esto se pueden utilizar tres técnicas: la primera implica que todas las consultas complejas deben eliminarse por consultas simples que accesan una única tabla y los joins se hacen a nivel lógico en la capa de acceso a datos, la segunda implica desnormalizar las tablas para que se puedan hacer consultas desde una sola tabla, la tercer técnica es utilizar tablas de consolidación. En las tablas de consolidación todas las tablas individuales están en una BD distinta, pero para aquellas consultas que necesitan hacer búsquedas sobre todos los registros, se crea una tabla resumen en otra bd que contine todos los registros de todos los shards, aunque esta técnica permite hacer búsquedas sobre todos los registros, implica moficar la capa de acceso a datos para que le de mantenimiento a las talbas individuales y las tablas consolidadas lo cual aumenta la complejidad de la aplicación.

     

    Debido a que la aplicación de Sharding tiene ventajas y desventajas es necesario seguir algunos principios:

      1. No todas las tablas deben ser consideradas para Sharding, antes de implementar una estrategia de Sharding es necesario elegir cuales son las tablas candidatas para particionamiento físico. Estas tablas candidatas son aquellas que crecen mucho en nuestro sistema y que posible dividir en varias bases de datos sin poner mucho estres u overhead en la capa de acceso a datos
      2. En algunas ocasiones es mejor utilizar Windows Azure Storage que SQL Storage, por ejemplo, las imágenes y videos es mejor utilizarlas en Windows Azure Storage

    Saludos,

     

    Ing. Eduardo Castro Martinez, PhD – Microsoft SQL Server MVP

     

    http://mswindowscr.org

    http://comunidadwindows.org

    Costa Rica

    Technorati Tags: SQL Server

    LiveJournal Tags: SQL Server

    del.icio.us Tags: SQL Server

    http://ecastrom.blogspot.com

    http://ecastrom.wordpress.com

    http://ecastrom.spaces.live.com

    http://universosql.blogspot.com

    http://todosobresql.blogspot.com

    http://todosobresqlserver.wordpress.com

    http://mswindowscr.org/blogs/sql/default.aspx

    http://citicr.org/blogs/noticias/default.aspx


    Categorías: Bases de datos

    Proyectos SQL Azure en Producción

    DB: Eduardo Castro - 21 January, 2010 - 16:45

    Les comento que estamos trabajando un proyecto que integra las siguientes tecnologías:

     

    SQL Azure

    Windows Azure

    Silverlight

    MVC 2.0

    Visual Studio 2010

     

    Pronto estaremos posteando código ejemplo para que puedan ver el potencial de toda esta tecnología.

     

    Saludos,

     

    Eduardo Castro Martinez


    Categorías: Bases de datos

    Microsoft Community Media Center Latino América [Oradores Destacados 2009]

    DB: Eduardo Castro - 11 January, 2010 - 20:10

    Gracias el Equipo de Microsoft MSDN y TechNet de Latino América por permitirme participar como Speaker en los Webcasts para la audiencia de ITPro´s de Latinoamerica. Es para mi un honor poder estar dentro de los Top 10 Oradores del 2009!!!

     

    CMC 3

     

     

     

     

     

    CMC 1

    CMC 2


    Categorías: Bases de datos

    Video del Evento Windows SQL Azure – SQL Server 2008 R2

    DB: Eduardo Castro - 11 December, 2009 - 21:25

    Les comparto el video de la charla que se impartió en el Evento Sobre Windows Cloud Platform y SQL Server 2008 R2 en el Hotel Aurola Holiday Inn el 10 de diciembre del 2009.

     

    http://www.vimeo.com/8120730

     

    SQL Server 2008 R2 Overview from Eduardo Castro on Vimeo.

     

    Saludos,

    Eduardo Castro Martinez – Microsoft SQL Server MVP

    http://mswindowscr.org

    http://comunidadwindows.org

    Costa Rica

    Technorati Tags: SQL Server

    LiveJournal Tags: SQL Server

    del.icio.us Tags: SQL Server

    http://ecastrom.blogspot.com

    http://ecastrom.wordpress.com

    http://ecastrom.spaces.live.com

    http://universosql.blogspot.com

    http://todosobresql.blogspot.com

    http://todosobresqlserver.wordpress.com

    http://mswindowscr.org/blogs/sql/default.aspx

    http://citicr.org/blogs/noticias/default.aspx

    Categorías: Bases de datos
    Distribuir contenido