Este documento presenta una agenda para optimizar consultas SQL desde abajo hacia arriba. Enrique Catalá es un experto en bases de datos que discute cómo entender planes de ejecución, operadores de join clave y trucos prácticos para mejorar el rendimiento de consultas. La presentación también cubre temas como indexación, agregación de consultas y evitar recompilaciones.
Todo el mundo que trabaja con base de datos siempre se ha preguntado alguna vez qué son los planes de ejecución y como se leen. Saber leer un plan de ejecución nos va a dar información valiosísima de cara a mejorar el rendimiento de una consulta. En esta sesión vamos a centrarnos en aprender a leer T-SQL para interpretar lo que está haciendo SQL Server para devolvernos la información.
En esta sesión conoceremos los operadores básicos de los planes de ejecución: nested loop, merge join, hash join, aggregates) y speeling. Conocerá también cómo interpretar un plan de ejecución y cómo leerlo.
Todo el mundo que trabaja con base de datos siempre se ha preguntado alguna vez qué son los planes de ejecución y como se leen. Saber leer un plan de ejecución nos va a dar información valiosísima de cara a mejorar el rendimiento de una consulta. En esta sesión vamos a centrarnos en aprender a leer T-SQL para interpretar lo que está haciendo SQL Server para devolvernos la información.
Si quieres aprender más sobre Cómo hacer Planes de Negocio, impartiré un seminario el 16 de Febrero en formato clases virtuales presenciales (100% online). Aquí os dejo un enlace del seminario: http://training.solidq.com/es/class/es-1432/
Prácticamente toda aplicación utiliza por debajo un motor de base de datos para almacenar información. Entender lo que hace cuando le pedimos datos a SQL Server puede ayudar a cualquier desarrollador a entender por qué sus consultas van lentas. No se trata solo de abrir esa "caja negra" que es SQL Server, sino de entender lo que realmente tiene en su interior. En esta sesión aprenderemos a leer planes de ejecución y contaremos además, qué novedades hay en SQL Server 2014 con el nuevo cardinality estimator
Todo el mundo que trabaja con base de datos siempre se ha preguntado alguna vez qué son los planes de ejecución y como se leen. Saber leer un plan de ejecución nos va a dar información valiosísima de cara a mejorar el rendimiento de una consulta. En esta sesión vamos a centrarnos en aprender a leer T-SQL para interpretar lo que está haciendo SQL Server para devolvernos la información.
En esta sesión conoceremos los operadores básicos de los planes de ejecución: nested loop, merge join, hash join, aggregates) y speeling. Conocerá también cómo interpretar un plan de ejecución y cómo leerlo.
Todo el mundo que trabaja con base de datos siempre se ha preguntado alguna vez qué son los planes de ejecución y como se leen. Saber leer un plan de ejecución nos va a dar información valiosísima de cara a mejorar el rendimiento de una consulta. En esta sesión vamos a centrarnos en aprender a leer T-SQL para interpretar lo que está haciendo SQL Server para devolvernos la información.
Si quieres aprender más sobre Cómo hacer Planes de Negocio, impartiré un seminario el 16 de Febrero en formato clases virtuales presenciales (100% online). Aquí os dejo un enlace del seminario: http://training.solidq.com/es/class/es-1432/
Prácticamente toda aplicación utiliza por debajo un motor de base de datos para almacenar información. Entender lo que hace cuando le pedimos datos a SQL Server puede ayudar a cualquier desarrollador a entender por qué sus consultas van lentas. No se trata solo de abrir esa "caja negra" que es SQL Server, sino de entender lo que realmente tiene en su interior. En esta sesión aprenderemos a leer planes de ejecución y contaremos además, qué novedades hay en SQL Server 2014 con el nuevo cardinality estimator
En esta sesión, exploraremos las inversiones de todas las características referente a la tecnología In-Memory OLTP en Microsoft SQL Server tanto On-Premises así como en la nube, incluyendo el T-SQL Surface Area, Los Procedimientos Almacenados nativamente compilados, así como las mejoras en cuanto a escalabilidad entre muchas otras.
En esta sesión trataremos las novedades de SQL Server 2014 en el área de motor relacional. Trataremos en profunidad las siguientes tecnologías: Buffer Pool Extension, mejoras en Resource Governor 2.0, novedades en índices columnares indexes, mejoras en particionado, estadísticas e indexación
Técnicas para optimizar tus aplicaciones de SQL Server con herramientas disponibles desde SQL Server 2005. Charla de la maratón de 24 horas del capítulo virtual de SQL Pass en español.
Con la llegada de SQL Server 2014 aparece un nuevo motor escrito totalmente desde 0 para aprovechar al máximo las capacidades del HW actual. En esta sesión veremos en qué consiste el nuevo motor en memoria para cargas OLTP de alto rendimiento
En esta sesión analizaremos experiencias de la vida real como consultor en trabajos de mejora de rendimiento. Veremos mejores prácticas para la configuración de SQL Server, tips para un mejor T-SQL y un ejercicio de como monitorear mi servidor de base de datos con Performance Counters, un SQL Server Express y un Excel con Power Pivot.
En esta presentación vemos un resumen delas nuevas caracterisitcas que tiene SQL Server 2016.
Saludos,
Ing. Eduardo Castro, PhD
Microsoft SQL Server MVP
Costa Rica
Introducción a Microsoft Azure SQL Data WarehouseJoseph Lopez
El nuevo Microsoft Azure SQL Data Warehouse (SQL DW) es un versátil servicio de almacén de datos que provee una solución Massively Parallel Processing (MPP) para "Big data" con verdaderas características de alta infraestructura empresarial. El servicio SQL DW está construido para la carga de datos en ejecución de unos cien gigabytes hasta petabytes de datos con características únicas como cálculo desagregado, permitiendo así que los clientes sean capaces de utilizar el servicio para satisfacer sus necesidades de almacenamiento. En la presente exposición les mostrare una mirada en profundidad de este nuevo servicio de Azure como la implementación, el escalamiento elástico (Grow, Shrink, y Pause), y las nubes de datos híbrida con integración de Hadoop a través Polybase permitiendo una verdadera experiencia de SQL a través de datos estructurados y no estructurados.
Diagnostico y resolución de problemas en sql serverSpanishPASSVC
En mi día a día como consultor me encuentro con una gran variedad de problemas relacionados directa o indirectamente con SQL Server. El diagnóstico de las causas reales de estos problemas suele requerir analizar tanto el hardware como el software de la plataforma. Presentar el diagnóstico y la resolución de problemas reales así como los procesos y herramientas utilizadas es el objetivo de esta sesión.
MySQL Cluster: El ‘qué’ y el ‘cómo’.
Una introducción en Español a MySQL Cluster, tanto Community como Carrier Grade Edition.
Con ejemplos técnicos de como instalar y sacar el mayor provecho de tu MySQL Cluster.
Se trata de una introducción, donde no se entra en cuestiones de asignación de cores a cada componente, réplica geográfica, resolución de conflictos 'built-in', réplicas de NDB (Cluster) a InnoDB, etc.
La plataforma de datos tradicional ha muerto, ha nacido una nueva plataforma de datos ubicua. Virtualizacion de datos, plataformas hibridas donde el dato no existe en una única fuente y escala sin limites. Estamos en la epoca donde realmente existe una plataforma de datos moderna. En esta sesión hablaremos del estado actual de la plataforma de datos en Microsoft
Capas de acceso a datos .net escalables de verdad contra SQL ServerEnrique Catala Bañuls
En esta sesión aprenderemos a detectar e implementar correctamente capas de acceso a datos .NET que escalen a las capacidades HW de la máquina
¿Qué aprende nuestro público? Sacar provecho de todas las posibilidades de rendimiento que se ofrecen combinando SQL Server y .NET
Tecnología vista en esta ponencia T-SQL, C#, multihilo,…
En esta sesión, exploraremos las inversiones de todas las características referente a la tecnología In-Memory OLTP en Microsoft SQL Server tanto On-Premises así como en la nube, incluyendo el T-SQL Surface Area, Los Procedimientos Almacenados nativamente compilados, así como las mejoras en cuanto a escalabilidad entre muchas otras.
En esta sesión trataremos las novedades de SQL Server 2014 en el área de motor relacional. Trataremos en profunidad las siguientes tecnologías: Buffer Pool Extension, mejoras en Resource Governor 2.0, novedades en índices columnares indexes, mejoras en particionado, estadísticas e indexación
Técnicas para optimizar tus aplicaciones de SQL Server con herramientas disponibles desde SQL Server 2005. Charla de la maratón de 24 horas del capítulo virtual de SQL Pass en español.
Con la llegada de SQL Server 2014 aparece un nuevo motor escrito totalmente desde 0 para aprovechar al máximo las capacidades del HW actual. En esta sesión veremos en qué consiste el nuevo motor en memoria para cargas OLTP de alto rendimiento
En esta sesión analizaremos experiencias de la vida real como consultor en trabajos de mejora de rendimiento. Veremos mejores prácticas para la configuración de SQL Server, tips para un mejor T-SQL y un ejercicio de como monitorear mi servidor de base de datos con Performance Counters, un SQL Server Express y un Excel con Power Pivot.
En esta presentación vemos un resumen delas nuevas caracterisitcas que tiene SQL Server 2016.
Saludos,
Ing. Eduardo Castro, PhD
Microsoft SQL Server MVP
Costa Rica
Introducción a Microsoft Azure SQL Data WarehouseJoseph Lopez
El nuevo Microsoft Azure SQL Data Warehouse (SQL DW) es un versátil servicio de almacén de datos que provee una solución Massively Parallel Processing (MPP) para "Big data" con verdaderas características de alta infraestructura empresarial. El servicio SQL DW está construido para la carga de datos en ejecución de unos cien gigabytes hasta petabytes de datos con características únicas como cálculo desagregado, permitiendo así que los clientes sean capaces de utilizar el servicio para satisfacer sus necesidades de almacenamiento. En la presente exposición les mostrare una mirada en profundidad de este nuevo servicio de Azure como la implementación, el escalamiento elástico (Grow, Shrink, y Pause), y las nubes de datos híbrida con integración de Hadoop a través Polybase permitiendo una verdadera experiencia de SQL a través de datos estructurados y no estructurados.
Diagnostico y resolución de problemas en sql serverSpanishPASSVC
En mi día a día como consultor me encuentro con una gran variedad de problemas relacionados directa o indirectamente con SQL Server. El diagnóstico de las causas reales de estos problemas suele requerir analizar tanto el hardware como el software de la plataforma. Presentar el diagnóstico y la resolución de problemas reales así como los procesos y herramientas utilizadas es el objetivo de esta sesión.
MySQL Cluster: El ‘qué’ y el ‘cómo’.
Una introducción en Español a MySQL Cluster, tanto Community como Carrier Grade Edition.
Con ejemplos técnicos de como instalar y sacar el mayor provecho de tu MySQL Cluster.
Se trata de una introducción, donde no se entra en cuestiones de asignación de cores a cada componente, réplica geográfica, resolución de conflictos 'built-in', réplicas de NDB (Cluster) a InnoDB, etc.
La plataforma de datos tradicional ha muerto, ha nacido una nueva plataforma de datos ubicua. Virtualizacion de datos, plataformas hibridas donde el dato no existe en una única fuente y escala sin limites. Estamos en la epoca donde realmente existe una plataforma de datos moderna. En esta sesión hablaremos del estado actual de la plataforma de datos en Microsoft
Capas de acceso a datos .net escalables de verdad contra SQL ServerEnrique Catala Bañuls
En esta sesión aprenderemos a detectar e implementar correctamente capas de acceso a datos .NET que escalen a las capacidades HW de la máquina
¿Qué aprende nuestro público? Sacar provecho de todas las posibilidades de rendimiento que se ofrecen combinando SQL Server y .NET
Tecnología vista en esta ponencia T-SQL, C#, multihilo,…
En esta sesión daremos una vuelta completa al paralelismo en SQL Server, hablaremos de parámetros de configuración, planes de ejecución paralelos, operadores paralelos y mucho más. Además veremos cómo monitorizar y detectar problemas de paralelismo y las posibles soluciones.
¿Qué hace interesante esta ponencia? Aprovechar mejor el HW disponible para que el retorno de inversión sea mejor
¿Qué aprende nuestro público? Aprenderemos a entender que hay que tener presente siempre el HW sobre el que se está ejecutando nuestra consulta, para sacarle mayor provecho
Vamos a realizar el análisis de rendimiento de un servidor desde varios puntos de vista. Empezaremos a analizar contadores de rendimiento manualmente, pasaremos por PowerBI, DataMining y acabaremos automatizando el proceso con R totalmente.
En esta sesión daremos una vuelta completa al paralelismo en SQL Server, hablaremos de parámetros de configuración, planes de ejecución paralelos, operadores paralelos y mucho más. Además veremos cómo monitorizar y detectar problemas de paralelismo y las posibles soluciones
SQL Server 2016 trae consigo una gran cantidad de recursos nuevos y muy interesantes para los desarrolladores. Tecnologias como Stretch Database, Real time operational analytics, Row Level Security, Temporal Tables son la punta del iceberg...mejoras brutales en In-memory database, el esperado soporte para PolyBase, R, JSON...hacen de esta edición una de las actualizaciones mas grandes desde SQL Server 2005.
En lugar de aprovisionar grandes recursos para tu DW, Azure ofrece una versión especial de SQL Server como DataWarehouse. Si está familiarizado con el appliance APS, SQLDW en Azure viene a ser su versión como servicio. Usted crea su DW desde el portal de Azure y ya puede empezar a cargar datos y explotarlos. En esta sesión veremos cómo habilitar el servicio y cómo empezar a explotar SQLDW como tu DW en la nube.
Tanto en SQL Server 2016 como en SQLAzure (PaSS), Microsoft nos proporciona nuevas herramientas para que el comportamiento de SQL Server sea más predecible. Con estas nuevas herramientas (QueryStore) como administrador de BBDD tienes nuevas posibilidades para analizar el rendimiento de consultas concretas, de patrones de consultas, y si suceden cambios importantes en su comportamiento. Venga a esta sesión para entender QueryStore y sacarle más partido a su servidor SQL Server.
Esta sesión es continuación de “planes de ejecución 1″. En esta sesión no se tocará ninguna cuestión explicada en la sesión anterior. El objetivo de esta sesión es explicar el funcionamiento de operadores avanzados como los pipes, indices temporales, hash avanzados, etc
Descripción: La adopción de SQL Server 2016 debe ser “tranquila” y sin problemas. En esta sesión le guiaremos en cómo hacer dicha migración/actualización y cuáles son los pasos que tomamos en SolidQ en estos proyectos de migración. Trataremos tanto migraciones side-by-side como migraciones in-place.
En lugar de aprovisionar grandes recursos para tu DW, Azure ofrece una versión especial de SQL Server como DataWarehouse. Si está familiarizado con el appliance APS, SQLDW en Azure viene a ser su versión como servicio. Usted crea su DW desde el portal de Azure y ya puede empezar a cargar datos y explotarlos. En esta sesión veremos cómo habilitar el servicio y cómo empezar a explotar SQLDW como tu DW en la nube.
Como hacer tuning a capas de acceso a datos en .NET (dotNetConference2016)Enrique Catala Bañuls
En esta sesión hablaremos de tecnicas de profiling avanzado de aplicaciones .NET. Usaremos interceptores, compilaremos nuestra modificación de EntityFramework, usaremos ANTS profiler, analizaremos con PowerPivot, usaremos SQL Server Profiler, revisaremos cómo trabajamos nativamente con los datos ya capturados en la capa DAL de nuestra arquitectura,...Preparate para optimizar de verdad!
HERRAMIENTA CASE PARA MODELADO DE ALMACENES DE DATOS BASADA EN LENGUAJES ESPE...Enrique Catala Bañuls
Memoria de mi proyecto de fin de carrera. Herramienta CASE para modelado de almacenes de datos multidimensionales mediante la creación de un Domain Specific Language al que llamamos ObjectOrientedMultimensionalModel (OOMM)
Es posible utilizar .NET para programar funciones, procedimientos almacenados... en SQL Server pero... ¿es una buena idea hacerlo?SQLCLR es un recurso interesante para cualquier desarrollador de base de datos que nos permite sacar partido ante ciertas situaciones que el propio lenguaje T-SQL no nos permite. En esta sesión veremos pros y contras de utilizar .NET para programar nuestros objetos de BBDD desde un punto de vista funcional y de rendimiento. La idea es responder a la eterna pregunta: ¿Cuándo es bueno usar SQLCLR?
En este documento analizamos ciertos conceptos relacionados con la ficha 1 y 2. Y concluimos, dando el porque es importante desarrollar nuestras habilidades de pensamiento.
Sara Sofia Bedoya Montezuma.
9-1.
Inteligencia Artificial y Ciberseguridad.pdfEmilio Casbas
Recopilación de los puntos más interesantes de diversas presentaciones, desde los visionarios conceptos de Alan Turing, pasando por la paradoja de Hans Moravec y la descripcion de Singularidad de Max Tegmark, hasta los innovadores avances de ChatGPT, y de cómo la IA está transformando la seguridad digital y protegiendo nuestras vidas.
(PROYECTO) Límites entre el Arte, los Medios de Comunicación y la Informáticavazquezgarciajesusma
En este proyecto de investigación nos adentraremos en el fascinante mundo de la intersección entre el arte y los medios de comunicación en el campo de la informática.
La rápida evolución de la tecnología ha llevado a una fusión cada vez más estrecha entre el arte y los medios digitales, generando nuevas formas de expresión y comunicación.
Continuando con el desarrollo de nuestro proyecto haremos uso del método inductivo porque organizamos nuestra investigación a la particular a lo general. El diseño metodológico del trabajo es no experimental y transversal ya que no existe manipulación deliberada de las variables ni de la situación, si no que se observa los fundamental y como se dan en su contestó natural para después analizarlos.
El diseño es transversal porque los datos se recolectan en un solo momento y su propósito es describir variables y analizar su interrelación, solo se desea saber la incidencia y el valor de uno o más variables, el diseño será descriptivo porque se requiere establecer relación entre dos o más de estás.
Mediante una encuesta recopilamos la información de este proyecto los alumnos tengan conocimiento de la evolución del arte y los medios de comunicación en la información y su importancia para la institución.
Actualmente, y debido al desarrollo tecnológico de campos como la informática y la electrónica, la mayoría de las bases de datos están en formato digital, siendo este un componente electrónico, por tanto se ha desarrollado y se ofrece un amplio rango de soluciones al problema del almacenamiento de datos.
2. • Ingeniero Informático
• Mentor en Solid Quality Mentors
• Microsoft Active Professional 2010
• Microsoft Certified Trainer
• Microsoft Certified IT Professional
– Database Developer 2008
– Database Administrator 2008
• Arquitecto de entre otros
Health Check y SCODA
¿Quién es Enrique Catala?
3. Agenda Optimiza desde abajo
SQLU Summit
• Entender el motor de consulta relacional
• Planes de ejecución
– Leer planes de ejecución
– Foco especial en los operadores join
• Trucos prácticos
– Estrategias y situaciones que conviene conocer
4. El optimizador de consultas
SQLU Summit
• Encargado de planificar la navegación de los datos
almacenados físicamente
• Debe tener numerosas variables en cuenta:
– ¿Qué objetos están involucrados?
– ¿Qué tamaño tienen? (si son tablas)
– ¿Qué índices y estadísticas hay definidos para ellos?
– ¿Cómo está dispuesta la información físicamente?
– ¿Qué operadores se utilizarán?
– …
• Puede producir N^n soluciones posibles
• Es el culpable de que en cada versión, nuestro código sea
más rápido.
5. Query plan vs execution context
SQLU Summit
• Query plan (conocido como «plan de ejecución»)
– Método de acceso (El «algoritmo» por decirlo de alguna forma)
– Depende del patrón de consulta
– Solo lectura y reentrables
– Compartido con múltiples usuarios
– Dos versiones en ocasiones
• Versión en serie
• Versión paralela
• Execution context (conocido como «contexto de ejecucion»)
– Lo que se ejecuta finalmente y obtiene resultados
– Depende de los valores de parámetros
– Son reutilizables pero no reentrables
– Dependen completamente del user token y login token
• Mismos parámetros crean execution contexts diferentes con distintos usuarios
6. ¿Se puede descartar un plan de ejecución?
SQLU Summit
• El valor de un plan de ejecución que se decrementa, se calcula en nº de
ticks y tiene un valor máximo de 31, de forma que:
– COSTE = (coste E/S) + (coste cambio contexto CPU) + (coste memoria)
– Siendo
• Dos operaciones E/S = 1 tick (máximo 19)
• Dos cambios de contexto CPU = 1 tick (máximo 8)
• 128kb necesario = 1 tick (máximo 4)
– Para ad-hoc siempre es 0 y se incrementa en 1 cada vez que se reutiliza
• A partir de 2005 existe separación data-cache y plan-cache y lazywritter
solo decrementa data-cache por lo que…
– Tan pronto se llega al 50% del tamaño disponible para el buffer pool, el
siguiente plan de ejecución nuevo que entra en el plan-cache, decrementa
una unidad el contador de todos los planes de ejecución que existan en el
plan-cache.
– Si se llega al 75% del tamaño, se activa un gestor de recursos que decrementa
el contador de todos los planes de ejecución en 1
7. ¿Qué afecta a los planes de ejecución?
SQLU Summit
• Tipo de ejecución
– Consultas ad-hoc
– Procedimientos almacenados
• Tienen en cuenta
– Valores dados a los filtros y variables en su creación
– Estadísticas
• No tienen en cuenta
– Bloqueos en curso
– Uso de memoria en curso
• Les afecta y mucho la presión de CPU
select occurrence
from sys.dm_exec_query_optimizer_info
where counter = 'timeout'
8. Nested loops
SQLU Summit
• Pseudocódigo
• Operador join mas simple
• Doble bucle
• … R1 inner join R2 …
for each row R1 in the outer table
for each row R2 in the inner table
if R1 joins with R2
return (R1, R2)
9. Hash join
SQLU Summit
• Ejecución en dos fases
– Build: Cálculo de clave hash del inner
– Prueba: Lee la outer, crea su hash y compara con hash precalculado en fase
build
• Si se estima menos memoria para hash, aparecen los hash warnings y
carga en tempdb
for each row R1 in the build table
begin
calculate hash value on R1 join key(s)
insert R1 into the appropriate hash bucket
end
for each row R2 in the probe table
begin
calculate hash value on R2 join key(s)
for each row R1 in the corresponding hash bucket
if R1 joins with R2
return (R1, R2)
end
10. Merge join
SQLU Summit
• Pseudocódigo versión uno a muchos
• Lee simultáneamente las dos entradas
get first row R1 from input 1
get first row R2 from input 2
while not at the end of either input
begin
if R1 joins with R2
begin
return (R1, R2)
get next row R2 from input 2
end
else if R1 < R2
get next row R1 from input 1
else
get next row R2 from input 2
end
11. Operadores de join
SQLU Summit
• Nested Loops:
– Útiles para conjuntos pequeños de resultados.
– Su eficiencia depende del producto de tabla inner (arriba) * tabla outer (abajo)
– Puede escupir resultados inmediatamente
– soporta cualquier tipo de join
– Es el que más frecuentemente se encuentra
– Es altamente ineficiente si los conjuntos de datos son grandes
• Merge join:
– Util para conjuntos relativamente medianos de resultados.
– Es el mejor cuando hablamos de grandes valores de datos en tabla inner y outer porque su eficiencia depende de la suma de filas de
ambas tablas
– Puede escupir resultados inmediatamente
– Solo soporta equijoin
– Los datos deben ser ordenados "the inputs to the merge join must be sorted on the join keys. For example, if we have a join predicate
“T1.a = T2.b,” table T1 must be sorted on T1.a and table T2 must be sorted on T2.b"
• Hash join:
– Util para grandes conjuntos de resultados no ordenados y cuando la tabla que manda (inner) tiene sustancialmente menos filas que la
dependiente.
– Hasta no estar todo calculado, no escupe resultados
– Ineficiente si las dos tablas son muy grandes
– Su existencia indica:
• Falta un índice o el que existe no nos sirve
• Falta WHERE
• Alguna condicion no satisface al indice (en caso de haberlo) por culpa de algun calculo o algo...
Podemos forzar su uso
14. Herramientas de análisis de rendimiento
SQLU Summit
• Monitor de rendimiento
• SQL Server profiler
– Trazas de servidor
• DMVs y DMFs
• Eventos extendidos
• Books Online
15. Mejorar escenarios ad-hoc (I)
SQLU Summit
• Optimize for ad-hoc workloads
– A nivel de instancia de SQL Server
– Solo útil para consultas ad-hoc livianas
– Almacena un pequeño código auxiliar en lugar del plan completo
– Minimiza presión sobre el cache de planes de ejecución
– Solo si se detecta reutilización, se recompila y almacena en cache
16. Mejorar escenarios ad-hoc (II)
SQLU Summit
• Force parametrization
– A nivel de base de datos
– Ocurre por cada statement. Cada batch puede tener múltiples statements autoparametrizados
– Fuerza la parametrización de toda sentencia SELECT, UPDATE, INSERT y DELETE
– En ciertos escenarios, mejora enormemente el rendimiento a base de reutilización de planes de ejecución
• PRECAUCIÓN: Testear siempre el entorno antes de poner en producción. Puede que salgamos
perdiendo…¿alguien sabe por qué?
Excepciones
Statements dentro de SP,
funciones,…
Si ANSI_PADDING o
ANSI_NULL = OFF
Statements que referencian
variables
Statements en cursor
18. Vaciar plan cache
SQLU Summit
• ALTER DATABASE [dbName] SET ONLINE
• ALTER DATABASE [dbName] SET OFFLINE
• ALTER DATABASE [dbName] SET READ_ONLY
• ALTER DATABASE [dbName] SET READ_WRITE
• ALTER DATABASE [dbName] MODIFY NAME = [SomeDB_Name]
• ALTER DATABASE [dbName] MODIFY FILEGROUP Test1FG1 DEFAULT
• ALTER DATABASE [dbName] MODIFY FILEGROUP Test1FG1 READ_WRITE
• ALTER DATABASE [dbName] MODIFY FILEGROUP Test1FG1 READ_ONLY
• ALTER DATABASE [dbName] COLLATE Collation_Name
• DROP DATABASE [db_Snapshot_Name]
• DBCC FREEPROCCACHE
• DBCC FREESYSTEMCACHE
•
• OJO: En SQL Server 2005 RTM y SP1, DBCC CHECKDB limpia el plan cache PARA LA
INSTANCIA DE SQL SERVER!!!
19. Compilaciones y recompilaciones
SQLU Summit
• Hay que evitar siempre compilaciones y
recompilaciones
– Consumo excesivo de CPU y memoria
– Mayor tiempo de respuesta
21. Agregación de consultas
SQLU Summit
• Es lo que debemos hacer siempre de cara a una primera
optimización.
• Antes de SQL Server 2008
– Procesos externos como nuestro HealthCheck
• A partir de SQL Server 2008
– Ahora además, podemos hacer uso de DMVs
• Sys.dm_exec_query_stats
• Columnas
– Query_hash
» Hash calculado en la consulta…util para identificar consultas con lógica similar (lo
que hace HealthCheck)
» Util para buscar consultas con literales diferentes
– Query_plan_hash
» Hash calculado del plan de ejecución
» Util para buscar planes de ejecución similares
– NOTA: esto solo captura desde la última ejecución de SQL Server
22. Un ejemplo de lo que debemos buscar
SQLU Summit
11%
1%
18%
69%
0%
0%
0%
1%
% of memory used
Compiled Plan Proc
Compiled Plan Trigger
Compiled Plan Adhoc
Compiled Plan Prepared
Extended Proc Proc
Parse Tree UsrTab
Parse Tree Check
Parse Tree View
Database Name Cached Pages Memory (MB)
BBDD1 588.870 4600,55
BBDD2 98.906 772,7
tempdb 2.889 22,57
msdb 1.149 8,98
BBDD3 327 2,55
BBDD4 174 1,36
BBDD5 138 1,08
master 54 0,42
BBDD6 35 0,27
BBDD7 30 0,23
model 1 0,01
AdventureWorks 1 0,01
ReportServer 1 0,01
AdventureWorksDW 1 0,01
ReportServerTempDB 1 0,01
23. Indexación
SQLU Summit
• Tareas que debemos realizar
– Búsqueda de índices faltantes
– Búsqueda de índices que no se usan
– Búsqueda de índices duplicados
– Comparación de índices clústered vs nonclustered
– Quitar siempre key y RID lookups
• Filtrar índices si es necesario
• No aplicar funciones a columnas de índice
• No utilizar predicados tipo like ‘%...’
• Cuidado con los predicados: (a,b) requiere buscar por a como
mínimo.
• Pregunta: ¿En un índice definido por la tupla (a,b), si no se hace
referencia a «a», se utilizará el índice?
24. Los 10 mandamientos del rendimiento
SQLU Summit
• Amaras a los procedimientos almacenados sobre todas las cosas
• No aplicarás una función de SQL server en vano
• Santificarás los índices
• Honrarás las claves ajenas y las restricciones check
• SI matarás a cursores y consultas ad-hoc
• Cometerás agregación de consultas
• No robarás ciclos de CPU mediante recompilaciones
• No levantarás tablas variables cuando deberían ser temporales
• No consentirás el uso de query hints sin conocimiento de causa
• No codiciaras un SELECT *
25. Mas información
• El rincón del DBA
– http://blogs.solidq.com/ElRinconDelDBA/Home.aspx
• BI Corner
– http://blogs.solidq.com/BICorner/Home.aspx
• SolidQ SharePoint Team Blog
– http://blogs.solidq.com/sharepoint
• CuevaNet
– http://blogs.solidq.com/cuevanet
• Todos los Blogs
– http://blogs.solidq.com