Optimizando el desempeño de SQL Server Isabel de la Barra Colaboradora de Pass Chile Trainer Empresa: Netsolutions Twitter: Email: Isabel.delabarra@netsolutions.cl Blog: idelabar.blogspot.com
Patrocinadores del SQL Saturday PASS use Only Silver Sponsor Bronze Sponsor 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Optimización a Nivel de Sistema Operativo Agenda Optimización a Nivel de Sistema Operativo Optimización a Nivel de Bases de datos Optimización a Nivel de Consultas 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Sistema Operativo 17-11-2018 | SQL Saturday #472 – Santiago, Chile
¿Problemas de Performance? 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Cuellos de Botella Una rápida forma de identificar si tenemos contención por algún recurso es ver como estan las colas de procesos esperando por ese recurso. CPU: System: Processor Queue Length Disco: PhysicalDisk: Current Disk Queue Length Red: Network Interface: Output Queue Length Memoria: ????? Queue Length 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Memoria SQL Server intentará tomar toda la memoria disponible Si otros servicios comparten la máquina pueden quedar asfixiados Si compartes otros servicios en la misma maquina, limita la memoria de SQL Server 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Memoria Paging File: %Usage Paging File: %Usage Peak 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Archivo de Paginación Si necesitamos más memoria el archivo de paginación crecerá. Cuando un archiva de paginación crece, deja congelados los procesos. Si tenemos alta disponibilidad los servicios pueden pasar a otro nodo. Mucha paginación implica mucha I/O de Disco. 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Archivo de Paginación Tamaño entre 1 a 2 veces la memoria física. Inicial y Máximo Iguales!!!! Disco Físico Dedicado. No crecer No fragmentación No crecer Evitar Failovers por crecimiento. 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Virtualizando SQL Server SQL Server puede ser virtualizado pero con ciertas condiciones. Discos directamente atachados, no usar discos virtuales. No sacar Snapshots No revender procesador a mas de 2x1 No usar memoria dinámica. 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Bases de Datos 17-11-2018 | SQL Saturday #472 – Santiago, Chile
Archivos de bases de datos Separar los archivos de Bases de Datos de los Transactions Logs Priorizar operaciones de lectura en archivos de Bases de Datos Priorizar operaciones de escritura en transactions Logs Separar en disco aparte archivos de tempdb Separar archive de paginación de los archivos de SQL Server 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Recovery Model Modo Simple Modo Full Modo Bulk-Logged Recuperacion solo al ultimo full No requiere respaldo Modo Full Requiere respaldo del transaction log Recuperacion hasta la ultima transaccion Recuperacion en un punto del tiempo Modo Bulk-Logged Menos I/O que full Menos espacio que Full Requiere Respaldo 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Recovery Model Las mejores practicas dicen que debemos usar recovery model full… pero …. DEBEMOS RESPALDAR EL TRANSACTION LOG. Si no se respalda el archivo de log crecera y crecera. Algunos DBA dejan un job que los trunca y hace shrink en forma periodica, por que guardar lo que no vamos a conservar? 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Compresión de Respaldos 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Autogrown y AutoShrink Como una forma de “ahorrar” espacio en disco algunos DBA tienen activado AutoShrink o ejecutan un job que hace el Shrink de la base Problemas: Fragmentacion de los archivos al crecer de a pedacitos Las transacciones quedan en espera cuando el archive esta creciendo Mayor I/O durante el crecimiento Duración mayor de los procesos. 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Memory Buffer y Buffer Cache Cuando se ejecuta una query la primera vez esta se parsea, optimiza, compila y se ejecuta leyendo la información de disco. La primera ejecución demora mas tiempo que las veces siguientes. Al reiniciar SQL Server se elimina la información en memoria. 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Consultas 17-11-2018 | SQL Saturday #472 – Santiago, Chile
Bloqueos Los bloqueos son normales en las transacciones, ellos aseguran que los datos no están siendo modificados mientras se realiza una transacción No es deseable que estos bloqueos duren mucho tiempo. 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
DeadLocks Usar las tablas en el mismo orden en las distintas transacciones. Evitar hacer selects de muchos datos dentro de la transacción. No esperar datos o respuesta de usuario dentro de una transacción. Usar WITH (NOLOCK) si no se modificaran los datos Usar índices y paralelismo en consultas lentas Granted Lock Waiting Lock Resource 1 Resource 2 Task 1 Task 2 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Identificando DeadLocks SQL Server automáticamente los detecta y “mata” la transacción menos costosa devolviendo Error 1205. SQL Server: Locks: Number of DeadLocks este valor debiera estar siempre en 0, si es mayor hay que investigar con profiler que transacciones están causando los deadlocks 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Deadlocks en Profiler 17-11-2018 | SQL Saturday #472 – Santiago, Chile
WITH (NOLOCK) 17-11-2018 | SQL Saturday #472 – Santiago, Chile
Paralelismo El ejecutar las consultas grandes distribuyéndola en varios procesadores acelera las consultas La configuración max degree of parallelism puede ser sobreescrita con la opción MAXDOP en la query 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Paralelismo 17-11-2018 | SQL Saturday #472 – Santiago, Chile
Fragmentacion sys.dm_db_index_physical_stats 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Page Split 17-11-2018 | SQL Saturday #472 – Santiago, Chile
Fill Factor Cuando SQL Server Crea índices, cada pagina queda cercana al 100% llena No hay espacio para los futuros insert o update Puede causar costosas divisiones de paginas en ciertas tablas Promueve la fragmentación del índice SQL Server Permite especificar la cantidad de espacio libre en las hojas del índice con la opción FILL FACTOR en la definición. Además con PAD INDEX indico que se aplique el mismo factor al resto de las páginas del índice. 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Índices Se organizan en arboles B-Tree Las tablas solo pueden tener un índice clusterizado. Evitar muchos índices en tablas frecuentemente actualizadas Usar muchos índices en tablas con pocas actualizaciones de gran volumen y muy consultada. Usar índices en vistas frecuentemente usadas. Evitar índices en tablas pequeñas. Usar DataBase Engine Tunning Advisor para analizar la falta de índices. 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Índices Índices que cubren una query incluyendo columnas adicionales mejoran el desempeño. Crear índices no clusterizados en columnas frecuentemente usadas en Joins Mantener las llaves del índice lo mas pequeñas posibles. Usar índices XML en columnas de tipo XML Considerar el orden de las columnas cuando el índice contiene varias columnas (mas único primero) No usar índices en columnas del tipo text, ntext, image, varchar(max), nvarchar(max) y varbinary(max) 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Preguntas ?
Sea cual sea su pasión datos - hay un capítulo virtual para usted! 17-11-2018 | SQL Saturday #472 – Santiago, Chile SQL Saturday #472 – Santiago, Chile
Gracias !!!