SQL Server 2K / 2K5 / 2K8 y discos de estado sólido: ¿optimizaciones específicas?

9

¿Alguien está ejecutando SQL Server en unidades de estado sólido? ¿Has encontrado algún consejo de optimización específico? Estoy específicamente interesado en formas de reducir la frecuencia con la que SQL Server realiza pequeñas operaciones de escritura aleatoria, ya que son la némesis del rendimiento SSD, particularmente las unidades SSD MLC.

Hay algunas optimizaciones obvias que uno puede hacer, por supuesto: los datos pesados ​​de lectura deben servirse desde el SSD, y las cosas pesadas de escritura deben dejarse a los discos giratorios tradicionales. ¡Eso incluye registros de transacciones, naturalmente!

Dado el presupuesto suficiente, por supuesto, uno querría usar discos SSD SLC como el X25-E o la serie Vertex Ex o varias ofertas de nivel empresarial. Pero también estoy interesado en consejos que podrían beneficiar las configuraciones de SSD MLC. Creo que es un área interesante. Uno de los clientes de mis clientes tiene un presupuesto pequeño y un conjunto de datos que ha crecido enormemente y se enfrentan a una reescritura completa de casi cien consultas para mantener un nivel de rendimiento decente. Sin embargo, tengo la sospecha de que menos de $ 500 de RAM y espacio en SSD podrían generarles una mayor ganancia de rendimiento que miles (posiblemente decenas de miles) de dólares en tiempo de desarrollo.

John Rose
fuente

Respuestas:

3

No estoy seguro de lo que quiere decir al reducir la cantidad de pequeñas escrituras aleatorias que hace SQL Server. SQL Server escribe páginas de datos solo durante los puntos de control, por lo que la única forma de limitar el número de escrituras es cambiar el intervalo del punto de control o no realizar tantas operaciones de DIU. ¿Querías decir otra cosa?

En todas las implementaciones de SSD que he visto (un puñado), es todo lo contrario de lo que estás sugiriendo: el mejor uso de SSD parece ser para registros de transacciones pesados ​​de escritura y tempdb, básicamente, ¿dónde está el mayor I / O subsistema de cuello de botella y pegue los SSD allí, ya que el tiempo de búsqueda y la latencia se reducen a una constante baja.

Consulte este documento de investigación que MS produjo (desafortunadamente no está muy detallado en los detalles de SQL Server): Migración del almacenamiento del servidor a SSD: análisis de compensaciones .

¡Espero que esto ayude!

Paul Randal
fuente
Gracias por ese enlace al artículo de MS. Es frustrantemente corto en detalles, ¿no? :) Lamentablemente, las pequeñas escrituras aleatorias son algo que puede dar lugar a ajustes SSD. En pocas palabras, incluso para una escritura pequeña (es decir, 4KB), el SSD debe leer un bloque completo en la memoria, modificarlo y volver a escribirlo. Así es como funciona la memoria flash de la generación actual. Gran artículo de descripción general de SSD: anandtech.com/storage/showdoc.aspx?i=3531&p=1
John Rose
2

No puede modificar las características de E / S de los servidores SQL. Su unidad básica de acceso al disco, para archivos de datos, es una página de 8Kb. Los escribirá principalmente durante un punto de control, pero también los escribirá perezosamente cuando pueda.
SQL no espera a que se completen las escrituras en el disco de datos antes de regresar, solo las escrituras de registro deben completarse. Si solo puede mantener un registro de base de datos en un disco, entonces serán escrituras secuenciales y estarán bien en discos duros rápidos normales.
El impacto en el rendimiento desde el punto de vista de SQL es cuando tiene que leer los discos. Si puede darle más memoria, entonces SQL contendrá más páginas de datos en la memoria, que es más rápido que cualquier tipo de disco, SSD o de otro tipo. Obviamente, también puede reducir la cantidad de lecturas de disco creando índices apropiados. Espero que un SSD también ayude con estas lecturas porque es probable que sean aleatorias y se mantengan en espera de que se muevan los cabezales de las unidades.
No sé de qué tamaño de la base de datos estamos hablando aquí, pero puede que desee echar un vistazo a HyperOS. Hacen discos sata que en realidad son solo una carga de ram ram DDR2, con un SSD o un disco de 2.5 pulgadas como respaldo. El patrón de acceso del servidor no importará mucho. Sin embargo, no pondría los registros en nada como esto. Los registros son los que mantienen sus datos consistentes, necesitan ir en un medio confiable y, a pesar de su SSD y batería de respaldo, y el servidor probablemente tenga un UPS, etc., todavía me sentiría incómodo por no tener mis registros en un disco duro real en algún tipo de matriz RAID tolerante a fallas.

pipTheGeek
fuente
1

Las pequeñas operaciones aleatorias son la némesis de los discos tradicionales, debido a la latencia de búsqueda de cabeza ... Los SSD son excelentes para abordar exactamente esto.

Con operaciones largas y secuenciales, los discos estándar funcionan bastante bien, por lo que no tendría ningún propósito usar SSD (desde un punto de vista de rendimiento, por supuesto).

Massimo
fuente
2
Los SSD son fantásticos en operaciones de lectura aleatoria debido a la latencia de búsqueda cercana a cero. Son menos hábiles en las operaciones de escritura aleatoria debido al hecho de que una operación de escritura SSD implica leer un bloque flash completo (generalmente, 128 KB), modificar el contenido y volver a escribir todo el bloque en flash. En cuanto a las operaciones largas y secuenciales, los mejores SSD de nivel de consumidor (Intel, OCZ Vertex, Samsung) logran más de 200 MB / seg de lectura y 80 MB-150 MB de escritura, muy por encima de lo que puede producir un solo disco giratorio.
John Rose
¿Estás seguro? No entiendo por qué una operación de escritura debería implicar la lectura de un bloque de datos antes de volver a escribirlo ... los datos a escribir deberían estar en la memoria de la computadora, ¿no?
Massimo
2
@Massimo: porque el sistema operativo escribe solo unos pocos bytes, pero el SSD funciona en unidades (páginas) de 128 KB (generalmente). Solo puede escribir una página de 128 KB, nada menos, nada más. Entonces, cuando modifica, digamos el centro de una página, la unidad lee la página completa, actualiza el centro y luego escribe la nueva página generalmente en otro lugar, mientras invalida la ubicación anterior.
Cristian Ciupitu
Cristian Ciupitu tiene razón. En algunos SSD esto se ve mitigado por una memoria caché integrada (creo que todas las unidades que usan el controlador Indilinx tienen 64 MB de memoria caché) y quizás también por el almacenamiento en caché de escritura del sistema operativo, si está habilitado. Sin embargo, incluso un caché de 64 MB tiene sus limitaciones: para un servidor de base de datos que realiza muchas escrituras, 64 MB podrían no ser suficientes. Los fabricantes de firmware no publican muchos detalles, pero uno supondría que los mejores firmwares (Intel, Indilinx) hacen algunos pedidos / lotes inteligentes para mantener pequeñas escrituras aleatorias dentro de una página de 128 KB para minimizar esta sobrecarga.
John Rose
Según tengo entendido sobre el caché, le ahorrará muchas de estas pequeñas escrituras por las que está tan preocupado. Ni siquiera importa tanto, ya que las bases de datos están diseñadas para hacer muchas lecturas / escrituras lineales. Apuesto a que SSD aún funcionaría mejor ya que es una lectura lineal, no una secuencia secundaria. Lo que significa que todavía habrá brechas entre los datos y SSD eliminaría el tiempo de búsqueda.
Pirolítico
0

No basta con señalar aquí todavía para agregar al hilo de comentarios, pero si configura el tamaño de página de la base de datos / recuento de múltiples lecturas para cualquier cosa en las SSD a un múltiplo del tamaño de página de la SSD, esto no debería ser un problema.

No he trabajado en SQL Server en mucho tiempo, así que no estoy seguro de si estas opciones están disponibles allí. He estado haciendo Oracle y DB2 durante los últimos años y esto resolvería sus inquietudes ya que la base de datos se ajustaría adecuadamente a las características del disco.

Kevin K
fuente
0

Recomendaría alinear la partición donde se almacenan los archivos de la base de datos.

También recomendaría decidir qué pasa en RAID 0 para perf (ldf y TempDB), y colocar datos críticos en RAID 1 (mdf).

En tercer lugar, realmente debe actualizar el firmware de la unidad, así como los controladores / firmware del controlador SATA. Al hacerlo, le da a la compañía de hardware y a sus desarrolladores la oportunidad de optimizar el rendimiento para usted.

GregC
fuente
RAID 0 nunca debe usarse para un servidor de base de datos. Si falla una sola unidad, la base de datos está inactiva hasta que se reemplaza el disco y los datos faltantes se restauran de la cinta (esto incluye el registro).
mrdenny el
En un mundo donde el dinero no es un objeto, todo debería funcionar en caché L1 respaldada por batería. En la industria bancaria, el archivo LDF es tan importante como el mdf. Para la informática científica, MDF es el único archivo que realmente necesita ser 100%.
GregC