¿Tu servidor SQL Server es escalable? ¿Sospechas que su rendimiento no es el esperado? En esta sesión veremos por donde empezar a realizar un análisis de rendimiento para encontrar los cuellos de botella actuales así como potenciales problemas de escalabilidad desde el punto de vista de SolidQ haciendo especial hincapié en los mas comunes que por nuestra amplia experiencia hemos detectado en la mayoria de clientes.
2. Agenda
α Relational analisis
α Agregacion de consultas
α Collations
α Alineamiento de particiones
α Confiailidad de fk
α Indexing
β Duplicacion
β No usados
β Duplicados no usados
β Clustered vs nonclustered
α Esperas y Memoria
α HC
β Health Check v2
β HC Security
β HC Azure
3. Detección de consultas ineficientes
¿Por qué es tan importante?
α El escenario siempre es tan complejo que nadie sabe la
causa de dónde está el problema
α Método infalible: La agregación de consultas
β Encontrar patrones T-SQL que producen mayor presión a SQL
Server
β No buscamos la consulta lenta, buscamos el patrón de consultas
que mas hace sufrir al servidor
Consulta A: Tiempo de ejecución 5s y 5 ejecuciones en 10 minutos
Consulta B: Tiempo de ejecución 300ms y 1000 ejecuciones en 10
minutos
Generalmente el cliente siempre se lleva sorpresas
4. Detección de consultas ineficientes
¿Qué buscamos?
α Queremos extraer un valor hash que identifique el patrón
y agregar por él para calcular lecturas, escrituras, cpu,…
Select col1,col2 from mitabla where columna = 14
Select col1,col2 from mitabla where columna = 15
…
Select col1,col2 from mitabla where columna = #
α ¿qué pasa con esto?
exec sp_cursoropen 123456, N'SELECT * from table WHERE …’
exec sp_cursorfetch 123456, ‘y’
exec sp_cursorfetch 123456, ‘z’
exec sp_cursorclose 123456
exec sp_cursoropen 123456, N'SELECT col1 from another_table,another_table2
WHERE …’
exec sp_cursorfetch 123456, ‘y’,’z’,’w’
…
5. Troubleshooting
¿En qué nos fijamos?
Database Name Cached Pages Memory (MB)
0% % of memory used BBDD1
BBDD2
588.870
98.906
4600,55
772,7
0%
1% tempdb 2.889 22,57
0% Compiled Plan Proc msdb 1.149 8,98
1%
11% BBDD3 327 2,55
Compiled Plan Trigger BBDD4 174 1,36
BBDD5 138 1,08
18% master 54 0,42
Compiled Plan Adhoc
BBDD6 35 0,27
BBDD7 30 0,23
Compiled Plan model 1 0,01
69% Prepared AdventureWorks 1 0,01
Extended Proc Proc ReportServer 1 0,01
AdventureWorksDW 1 0,01
ReportServerTempDB 1 0,01
8. Indexación
Algunas buenas prácticas
α 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
β Índices utilizados únicamente en inserciones
10. Los 10 mandamientos del
rendimiento
1. Amaras a los procedimientos almacenados sobre todas las
cosas
2. No aplicarás una función de SQL server en vano
3. Santificarás los índices
4. Honrarás las claves ajenas y las restricciones check
5. SI matarás a cursores y consultas ad-hoc
6. Cometerás agregación de consultas
7. No robarás ciclos de CPU mediante recompilaciones
8. No levantarás tablas variables cuando deberían ser
temporales
9. No consentirás el uso de query hints sin conocimiento de
causa
10.No codiciaras un SELECT *
12. DMVs
Vistas de administración dinámica
α Exponen estados y datos de rendimiento
β +- 70 vistas
β Útiles con DAC
α División por áreas funcionales
β dm_exec_* (codigo ejecutado y conexiones de usuario)
β dm_os_* (memoria, bloqueos)
β dm_tran_* (transacciones y aislamiento)
β dm_io_* (I/O discos y red)
β dm_db_* (bases de datos y sus objetos)
α Otras
β Replicación, service broker…
13. Wait Stats
Esperas del servidor
α ¿A que está esperando el servidor?
β Sys.dm_os_wait_stats
α Estadísticas de esperas incrementales
β Siempre incrementando contadores
α Útiles para la monitorización
β Deltas de tiempo
α Tipos de espera más comunes
β Paralelismo: CXPACKET
β Disco: PAGEIOLATCH_*, WRITELOG…
β Bloqueos: LCK_M_*
14. FileIO Stats
¿Cómo van los discos?
α Sys. dm_io_virtual_file_stats
β Una especificación de wait stats
α Esperas a nivel de disco
β Latencias de lectura y escritura en todas los ficheros (datos y log)
α Estadísticas de esperas incrementales
β Incrementando contadores
α Monitorización
β Deltas de tiempos
15. Memoria
α sys.dm_os_buffer_descriptors
β Páginas en el buffer
β Distribución por fichero
β Distribución por base de datos
α Syscacheobjects
β Contiene información de la cache
β Tipos de objeto
β Utilización por objeto en cache
18. HealthCheck v2
Automatizacion del troubleshooting de SolidQ
α Servicio global aportado por SolidQ
β Lanzado en países como España, USA, Brasil, India,…
β Generación de documentos en idioma Castellano, Ingles y
Portugués,…por ahora
α Automatización de la experiencia de SolidQ en
troubleshooting de SQL Server
α Mas tiempo para pensar y menos para redactar!!
β Resultado: Análisis mas profundos y correlacionados
α Algunos clientes:
β Pentágono
β …
19. HealthCheck v2
Automatizacion del troubleshooting de SolidQ
α Servidor y hardware
β Gestion de memoria, sistema de almacenamiento, alineamiento de
discos,…
α Instancia de SQL Server
β BBDD sistema, uso de recursos de memoria, red, discos,…
β Seguridad, SQL Agent, parametros de configuracion, service packs…
β Esperas, uso de discos, …
α Mantenimiento de Bases de datos
β Analisis de estrategias de backups, Consistencia, indexacion,
latencias, …
α Bases de datos
β Configuración, seguridad,…
α Topologia de consultas
α Migración
β Foco específico en aspectos no analizados en SSUA (lo vimos el
martes)
21. HealthCheck Security
Servicio de seguridad de SolidQ
α Cubre aspectos de:
β Inicios de sesión
γ Autenticación
γ Política de passwords (débiles, vacíos, predecibles)
γ Excesivos permisos
β Usuarios
γ Roles de base de datos
γ Roles de usuario
γ Roles de aplicación
β Servidores vinculados
γ Contextos de seguridad
γ Openrowset
β Configuraciones de base de datos
β Endpoints
23. Si quieres disfrutar de las mejores sesiones de
nuestros mentores de España y Latino América,
ésta es tu oportunidad.
http://summit.solidq.com/madrid/