Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Tamaño máximo de una base de datos

Estas en el tema de Tamaño máximo de una base de datos en el foro de SQL Server en Foros del Web. Hola a todos. Estoy trabajando en una aplicacion web que es algo mas amplia de lo q yo estoy acostumbrado. Segun el estudio que hizo ...
  #1 (permalink)  
Antiguo 27/11/2011, 11:04
 
Fecha de Ingreso: febrero-2009
Mensajes: 472
Antigüedad: 15 años, 2 meses
Puntos: 14
Pregunta Tamaño máximo de una base de datos

Hola a todos. Estoy trabajando en una aplicacion web que es algo mas amplia de lo q yo estoy acostumbrado.
Segun el estudio que hizo un compañero mio, la base de datos puede crecer bastante rapido y me preocupa el tema del tamaño.

Mi idea es trabajar con sql server 2008.
Que es mejor una base de datos arriesgandome a llenarla, o separa las bases de datos en varias dividiendo el tamaño.

Por ejemplo. Imaginar que tengo q gusrdar muchos datos de clientes. Que sera mejor todos en una base de datos??, o por ejemplo una base de datos para los clientes cullo apellido empieza entre "a y f", otra base para los que empiecen entre "g - l" etc

Espero que alguien me pueda ayudar. Muchas gracias a todos por adelantado.

Un saludo
  #2 (permalink)  
Antiguo 28/11/2011, 09:13
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Tamaño máximo de una base de datos

El tamaño no es problema en una base de datos, revisa las opciones de tu base de datos y como tienes configurado el crecimiento de la misma, ponlo que tenga un crecimiento exponencial a lo que mencionas por ejemplo puedes iniciar tu base de datos con un tamaño de 2GB y que cada crecimiento que tenga sea de un 25% (500MB) asi que cuando tu base llegue a los 2 GB crecera 500 MB y cuando llegue a los 2.5GB crecera 2.5*.25=?? jejeje o juega un poco con estos valores, lo que planteas no es muy factible, porque tendrias trabajando mas al manejador de base de datos...

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 02/12/2011, 17:16
 
Fecha de Ingreso: febrero-2009
Mensajes: 472
Antigüedad: 15 años, 2 meses
Puntos: 14
Respuesta: Tamaño máximo de una base de datos

Hola Libras. En primer lugar muchas gracias por contestar y perdon por tardar tanto en contestar. Muchas gracias por tu explicacion, me ha sido de gran ayuda.
Por lo que veo me recomiendas usar una sola base de datos en lugar de varias como tenia pensado. Me preocupaba un poco comprometer la velocidad si el tamaño es muy elevado. Por otra parte el tener que manejar datos entre varias bases de datos no resulta factible como bien me argumentas.

Muchas gracias de nuevo

Un saludo
  #4 (permalink)  
Antiguo 02/12/2011, 21:58
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: Tamaño máximo de una base de datos

No hay ninguna mejora de rendimiento por almacenar las tablas en múltiples bases de datos dentro de la misma instancia, aún cuando hay sistemas que lo hacen, es por temas de administración, por ejemplo, si tienes una base con las tablas históricas donde los datos se modifican con poca frecuencia y otra base con las tablas actuales donde los datos se modifican con más frecuencia, puedes crear una política de backup y recuperación optimizada para cada caso. Para grandes volúmenes de datos te recomiendo ver temas como partitioning de tablas o filegroups.

Por otro lado, si hay mejoras cuando almacenas las tablas en múltiples bases de datos pero en diferentes instancias, siguiendo con el ejemplo, si tienes dos instancias, una para la base con los datos actuales y otra para la base con los datos históricos, puedes asignar más recursos de hardware (memoria, procesador, etc) a la base que lo necesite.

Saludos
  #5 (permalink)  
Antiguo 06/12/2011, 14:46
 
Fecha de Ingreso: febrero-2009
Mensajes: 472
Antigüedad: 15 años, 2 meses
Puntos: 14
Respuesta: Tamaño máximo de una base de datos

Hola matanga. En primer lugar muchas gracias por tu aportacion. He estado leyendo un articulo sobre la particion de tablas y no comprendo muy bien su funcionamiento.
Por lo que me dices dividir los datos en varias tablas haria que el rendimiento fuese un poco mejor, pero ello me lleva a una duda.
Supongamos que tenemos una tabla de clientes, cuya clave principal es un indice autoincremental. Si hacemos una particion de las tablas como podriamos selecionar por ejemplo el cliente con codigo 1?? al tener varias tablas habia carios clientes con el codigo 1.
Espero haber explicado bien mi duda ya que es un tema que nunca habia oido.

Muchas gracias nuevamente.

Un saludo
Pinty
  #6 (permalink)  
Antiguo 07/12/2011, 19:56
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: Tamaño máximo de una base de datos

En general, cuando trabajas con tablas de gran tamaño, los problemas de rendimiento (desde el punto de vista de almacenamiento) se dan por dos motivos:

1. Leer un rango de valores, es decir, si el resultado de un select con una condición where sobre un campo indexado devuelve más de un 15% (aprox) de los registros totales, el optimizador decide que es más eficiente resolver la consulta con la operación fullscan (recorrer toda la tabla) en vez de utilizar el índice con las operaciones index-range o index-seek. En este caso, particionar (almacenar la tabla en diferentes segmentos físicos) puede mejorar el rendimiento, por ejemplo: si tienes la tabla Facturas con el campo FechaFacturacion, puedes definir una partición por cada año de FechaFacturación, de esta manera, una consulta por rangos que pida todas las facturas del año 2010 (where FechaFacturación = 2010) se resuelve con un fullscan de una partición en vez de un fullscan de toda la tabla.

2. Alta concurrencia, si el almacenamiento físico total de la tabla recae sobre un único disco del servidor, las diferentes operaciones para acceder a los datos se resolverán en forma serial, no en paralelo, lo que puede provocar congestiones de I/O. En este caso, si el servidor tiene múltiples discos, puedes utilizarlos para distribuir las tablas creando filegroups (espacio de almacenamiento lógico que define la relación entre los ficheros de la base de datos y el sistema operativo), por ejemplo: separar las tablas en función del uso, las de mayor acceso en los discos rápidos y las de menor acceso en los lentos.

Este es un código de ejemplo que combina los dos casos, particionar una tabla y almacenar cada partición en un filegroup diferente.

Código:
--crear una base de datos
create database demo
go
--crear los filegroup f1, f2 y f3
alter database demo add filegroup f1
go
alter database demo add filegroup f2
go
alter database demo add filegroup f3
go

--agregar un fichero al filegroup f1 en el disco c:
alter database demo add file (
 name = demo_f1_dat01,
 filename = 'c:\mssql\data\demo_f1_dat01.ndf',
 size = 500mb
)
to filegroup f1
go

--agregar un fichero al filegroup f2 en el disco d:
alter database demo add file (
 name = demo_f2_dat01,
 filename = 'd:\mssql\data\demo_f2_dat01.ndf',
 size = 500mb
)
to filegroup f2
go

--agregar un fichero al filegroup f3 en el disco e:
alter database demo add file (
 name = demo_f3_dat01,
 filename = 'e:\mssql\data\demo_f3_dat01.ndf',
 size = 500mb
)
to filegroup f3
go
Código:
--crear un modelo de particion.
--sirve para campos datetime, y crea 3 particiones donde:
--los valores menores a 20100101 van a la partición 1
--los valores entre 20100101 y 20110101 a la particion 2
--y los valores mayores 20110101 a la particion 3 
create partition function f_facturas_partition (datetime)
as range left
for values ('20100101','20110101')
go

--crear un esquema que defina en que filegroup
--se almacena cada particion.
--puedes tener todas las particiones en un mismo filegroup,
--o como este caso, una partición por filegroup.
create partition scheme s_facturas_partition
 as partition f_facturas_partition
 to (f1, f2, f3)
go

--finalmente, crear la tabla definiendo sobre que campo
--se particionan los datos. 
create table facturas
 (id_factura int,
  fecha_factura datetime)
on s_facturas_partition (fecha_factura)
go
De todos modos, debes tener en mente que esto son aspectos físicos, no lógicos, y no tiene impacto en el modelo de datos o la estructura de las sentencias SQL, una consulta sobre una tabla devuelve el mismo resultado, esté particionada o no. En general, son decisiones que toma un DBA en el proceso de tunning para entornos de test o producción, rara vez forma parte del diseño o desarrollo del sistema.

Saludos

Etiquetas: server, sql, tamaño
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:57.