Muchas veces me hacen preguntan sobre las capacidades máximas de SQL Server. En las diferentes conversaciones, charlas y cursos salen preguntas como: ¿Existe algún límite en la cantidad de registros en una tabla?, ¿Cuántas bases de datos puedo tener en una instancia? o ¿cuántas instancias puedo tener en un servidor?
Esta información está al alcance de la mano en la documentación en línea de SQL Server. A continuación les presentamos un resumen de dichas capacidades máximas:
Objeto(SQL Serer 2008 R2) |
Tamaño/cantidad máxima |
Cantidad de Objetos (tablas, vistas, procedimientos almacenados, funciones, triggers, reglas, valores predeterminados y restricciones) | La suma de objetos en una base de datos no puede superar los 2,147,483,647 |
Bytes por columna de cadenas cortas | 8,000 |
Bytes por GROUP BY y ORDER BY | 8,060 |
Bytes por llave de índice | 900 |
Bytes por llave foranea | 900 |
Bytes por llave primaria | 900 |
Bytes por registro | 8,060 |
Bytes en texto de origen de un procedimiento almacenado | El menor del tamaño del lote o 250 MB |
Bytes por columna varchar(max), varbinary(max), xml, text o image | (2^31)-1 |
Caracteres por columna ntext o nvarchar(max) | (2^30)-1 |
Índices clúster por tabla | 1 |
Campos en GROUP BY y ORDER BY | Limitado solo por el número de bytes |
Campos o expresiones en una instrucción GROUP BY WITH CUBE o WITH ROLLUP | 10 |
Campos por llave de índice | 16 |
Campos por llave foranea | 16 |
Campos por llave primaria | 16 |
Campos por tabla no ancha | 1,024 |
Campos por tabla ancha | 30,000 |
Campos por instrucción SELECT | 4,096 |
Campos por instrucción INSERT | 4,096 |
Conexiones por cliente | Valor máximo de conexiones configuradas |
Tamaño de la base de datos | 524.272 terabytes |
Bases de datos por instancia de SQL Server | 32,767 |
Grupos de archivos por base de datos | 32,767 |
Archivos por base de datos | 32,767 |
Tamaño de archivo (datos) | 16 terabytes |
Tamaño de archivo (log) | 2 terabytes |
Referencias de tabla de llaves foráneas por tabla | 253 |
Longitud del identificador (en caracteres) | 128 |
Instancias por equipo | 50 instancias en un servidor independiente para todas las ediciones de SQL Server. |
SQL Server admite 25 instancias en un clúster de conmutación por error. | |
Longitud de una cadena que contiene instrucciones SQL (tamaño de lote) | 65.536 * Tamaño de paquete de red |
Bloqueos por conexión | Máximo de bloqueos por servidor |
Niveles de procedimientos almacenados anidados | 32 |
Subquerys anidados | 32 |
Niveles de triggers anidados | 32 |
Índices no clúster por tabla | 999 |
Número de expresiones distintas en la cláusula BY GROUP cuando cualquiera de los elementos siguientes está presente: CUBE, ROLLUP, GROUPING SETS, WITH CUBE, WITH ROLLUP | 32 |
Número de conjuntos de agrupamiento generados por los operadores de la cláusula GROUP BY | 4,096 |
Parámetros por procedimiento almacenado | 2,100 |
Parámetros por función definida por el usuario | 2,100 |
REFERENCES por tabla | 253 |
Registros por tabla | Limitado por el espacio de almacenamiento disponible |
Particiones por tabla o índice con particiones | 1,000 |
Estadísticas en columnas no indexadas | 30,000 |
Tablas por instrucción SELECT | Limitado solo por los recursos disponibles |
Columnas por instrucción UPDATE (tablas anchas) | 4,096 |
Conexiones de usuario | 32,767 |
Índices XML | 249 |
Conclusión: En la mayoría de los casos que conozco, las implementaciones de SQL Server están lejos de alcanzar sus límites. La cantidad de registros de las tablas están solo limitados por el espacio en disco que tengas para contenerlas. Además, no me imagino un servidor con cincuenta instancias (instalaciones de SQL Server) o una instancia con treinta y dos mil bases de datos o una base de datos con dos mil millones de objetos. Pero siempre es bueno conocer estos datos para estar tranquilos, pero teniendo cuidado de no exagerar sabiendo que estamos holgados.
desarrollé un query para crear 32,767 bases de datos para probar los límites, pero me quedé en 1500 por que apareció el siguiente mensaje:
Msg 701, Level 17, State 123, Line 1
There is insufficient system memory in resource pool ‘internal’ to run this query.
Es decir, tambien se requiere de mucha memoria para alojar todas esas bases de datos. Seguiré probando a ver si logro llegar al límite.