Documente Academic
Documente Profesional
Documente Cultură
Optimización
Versión 1.0
Performance SQL
El contenido de este documento ha sido elaborado y se ofrece solamente con carácter informativo y para uso exclusivo de los usuarios de los productos
de Softland Inversiones S.L. (en adelante Softland) en Latinoamérica, España y/u otros países.
El presente documento podrá ser revisado, modificado, editado o incluso remplazado o eliminado por Softland en cualquier momento, a su exclusivo
criterio y sin necesidad de previo aviso. Es responsabilidad del usuario revisar periódicamente si ha habido alguna actualización o modificación.
Softland no asume ninguna responsabilidad por cualquier error o imprecisión que pueden aparecer en dicho documento.
Dado que las condiciones bajo las cuales pueda ser usado el producto al que se refiere este documento están más allá del control de Softland, la
información provista no implica ninguna garantía de performance del producto final, así como Softland tampoco asume ninguna responsabilidad
respecto al uso del producto.
Ninguna información contenida en el documento constituye una oferta, solicitud o recomendación para comprar, o vender, o efectuar transacciones,
o servicios de ningún tipo, y/o a llevar a cabo ningún acto de ninguna índole o naturaleza. El contenido tampoco es parte de un contrato o de una
relación comercial. Los usuarios asumen a su costa y responsabilidad todos los riesgos asociados al uso del producto a que se refiere este documento.
En ningún caso, Softland, sus directores, funcionarios, empleados o agentes serán responsables frente al usuario por pérdidas directas o indirectas,
responsabilidades, reclamaciones, gastos o daños de cualquier tipo, ni contractual ni extracontractualmente, incluidos los casos de negligencia, que
sean consecuencia o deriven de alguna otra manera del uso de todas o de parte de la información contenida en este documento, o en relación con
ellas, aun cuando se no haya advertido de ello.
© Softland Inversiones S.L. Todos los derechos reservados. No se permite la reproducción total o parcial de este documento, ni su traducción, ni su
incorporación a un sistema informático, ni su locación, ni su transmisión, en cualquier forma o por cualquier medio, incluido, pero no limitado a medios
electrónicos, mecánicos, grabaciones y sistemas de recuperación, sin el permiso previo y escrito de Softland.
Historial de Versiones
Aprobación /
Revisión
Vigencia
Fecha Versión Descripción Autor
Fecha Revisó Fecha Aprobó
Tabla de contenido
Performance SQL
1. CONFIGURACIÓN DE WINDOWS
Versiones Soportadas: Windows Server 2008 a Windows Server 2016―siempre con la última versión
del Service Pack correspondiente―.
Plataformas x64 o x86.
Ediciones Standard, Enterprise, Datacenter.
En las opciones de Sistema se debe seleccionar «Optimizar para aplicaciones en segundo plano»
(Sistema->Avanzado->Performance->Avanzado).
En memoria virtual asignar espacio al menos la misma cantidad de memoria física que la asignada al
servidor.
2. CONFIGURACIÓN DE HARDWARE
Al menos procesadores de cuatro núcleos
Al menos 8 GB de RAM
Al menos discos rígidos separados para base de datos, log y boot de Windows.
Al menos placa de red Ethernet de Gigabit
3. SQL SERVER
Versiones Soportadas: SQL Server 2008 a SQL Server 2016―siempre con la última versión de Service
Pack instalado―.
o Para verificar la versión: SELECT @@VERSION
Idiomas: inglés y español
Servidores CLUSTER requieren configuraciones especiales. Consultar.
5. PLANES DE MANTENIMIENTO
Verificar la existencia de planes de mantenimiento o en su ausencia, crearlos.
o Realizar diariamente backup y verificación de integridad de la base de datos.
o Realizar diariamente actualización de estadísticas con un muestro del 20%.
o Realizar semanalmente una actualización de los índices de las tablas con reorganización de
los índices cluster con un Fill Factor de 80%.
6. CAPTURA DE ACTIVIDAD
Utilizar SQL Server Profiler para capturar las consultas de mayor duración.
o Utilizar el template “TSQL_Duration” y establecer el parámetro de duración mínima de las
consultas. Filtrar la actividad de un Host Particular.
o Realizar las operaciones que se desean optimizar.
o Exportar a archivo .trc
Utilizar la herramienta SQL Server Database Engine Tunning advisor
o Analizar las trazas generadas con la herramienta profiler.
o Analizar las propuestas generadas por la herramienta, las que serán sobre la incorporación
de estadísticas e índices.
o Incorporarlas al sistema con el diccionario de datos o vía Script TransactSQL generado con la
herramienta―preservar los scripts para futura referencia―.
7. SOFTLAND LOGIC
Identificar los procesos y/o reportes de peor desempeño.
Verificar en los reportes de usuario lo siguiente:
o Que todos los campos definidos en el reporte se utilizan/muestran o representan valor para
el reporte.
o La existencia de consultas a tablas de usuario utilizando columnas no indexadas.
o La existencia de consultas de modificación de datos en reportes.
o La existencia de vistas complejas―si el reporte es sobre una vista, las complejidades de la
consulta se suman―.
8. CONSULTAS ÚTILES
8.2 Consultar latencias de escritura y lectura en los distintos dispositivos físicos del servidor
Ejecutar la consulta siguiente:
SELECT [Drive],
CASE
WHEN num_of_reads = 0 THEN 0
ELSE (io_stall_read_ms/num_of_reads)
END AS [Read Latency],
CASE
WHEN io_stall_write_ms = 0 THEN 0
ELSE (io_stall_write_ms/num_of_writes)
END AS [Write Latency],
CASE
WHEN (num_of_reads = 0 AND num_of_writes = 0) THEN 0
ELSE (io_stall/(num_of_reads + num_of_writes))
END AS [Overall Latency],
CASE
WHEN num_of_reads = 0 THEN 0
ELSE (num_of_bytes_read/num_of_reads)
END AS [Avg Bytes/Read],
CASE
WHEN io_stall_write_ms = 0 THEN 0
ELSE (num_of_bytes_written/num_of_writes)
END AS [Avg Bytes/Write],
CASE
WHEN (num_of_reads = 0 AND num_of_writes = 0) THEN 0
ELSE ((num_of_bytes_read + num_of_bytes_written)/(num_of_reads + num_of_writes))
Template: TP_TEC_[TEMA].dotx Versión: 1.4 Vigencia : 26/08/2016
SELECT
t.NAME AS TableName,
s.Name AS SchemaName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB,
CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2))
AS UnusedSpaceMB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
WHERE
t.NAME NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY
t.Name, s.Name, p.Rows
ORDER BY
4 DESC