Estoy creando una base de datos en la que habrá alrededor de 30 tablas, con cada tabla que contenga decenas de millones de filas y cada tabla que contenga una sola columna importante y una columna de clave primaria / externa con el fin de maximizar la eficiencia de la consulta frente a la pesada actualizaciones e inserciones y hacer un uso intensivo de los índices agrupados. Dos de las tablas contendrán datos textuales de longitud variable, una de ellas con cientos de millones de filas, pero el resto contendrá solo datos numéricos.
Como realmente quiero exprimir hasta la última gota de rendimiento del hardware que tengo disponible (aproximadamente 64 GB de RAM, un SSD muy rápido y 16 núcleos), estaba pensando en permitir que cada tabla tenga su propio archivo para que no importa si Me estoy uniendo en 2, 3, 4, 5 o más tablas, cada tabla siempre se leerá usando un hilo separado y la estructura de cada archivo estará estrechamente alineada con el contenido de la tabla, lo que con suerte minimizaría la fragmentación y la haría más rápida. para que SQL Server agregue al contenido de cualquier tabla dada.
Una advertencia, estoy atascado en SQL Server 2008 R2 Web Edition . Lo que significa que no puedo usar el particionamiento horizontal automático, lo que lo descarta como una mejora del rendimiento.
¿Usar un archivo por tabla realmente maximizará el rendimiento, o estoy pasando por alto las características integradas del motor de SQL Server que lo harían redundante?
Segundo, si usar un archivo por tabla es ventajoso, ¿por qué create table
solo me da la opción de asignar la tabla a un grupo de archivos y no a un archivo lógico específico? Esto requeriría que creara un grupo de archivos separado para cada archivo en mi escenario, lo que me sugiere que quizás SQL Server no está imaginando las ventajas que supongo que vendrían de hacer lo que estoy proponiendo.
fuente
Mi primera sugerencia sería no hacer suposiciones sobre el rendimiento sin realizar pruebas de carga en ambas configuraciones.
Supongo que al haber visto tales configuraciones (que tienen sentido en el papel) en el pasado sería que tener cada tabla en un archivo separado no tendría un impacto positivo medible para el rendimiento ... y que la complejidad adicional compensaría cualquier ganancia de rendimiento incluso si fueran medibles.
Por último, cuando se trata de exprimir cada caída de rendimiento de un servidor SQL, lo remito al siguiente cuadro (proporcionado por mi Microsoft):
Cualquier optimización potencial que se pueda hacer desde la perspectiva de una aplicación eclipsa fácilmente cualquier posible optimización a nivel de configuración de hardware / base de datos ... así que concentre su atención de manera apropiada.
fuente
Como otros han señalado, no hay un beneficio directo de un archivo por tabla; Aquí hay una gran sinopsis de Steve Jones sobre cómo se originó este mito: http://www.sqlservercentral.com/blogs/steve_jones/2009/10/13/sql-server-legend-data-files-and-threads/
También es posible que desee investigar una vista particionada que creo que es compatible con 2008 Web Edition. Hay algunos trucos para codificar en una vista particionada, pero puede imitar muchas de las funciones de las tablas particionadas con relativa facilidad.
fuente
Creo que los archivos separados para cada tabla no aportarían ningún beneficio de rendimiento. Los índices correctos podrían tener un aumento potencial de rendimiento (lectura de disco) en el servidor de la base de datos.
¿SQL Server 2008 R2 admite la compresión? Si es así, enciéndelo.
Corrígeme si me equivoco.
fuente