¿Puedo colocar una base de datos completa en la memoria?

9

Mi base de datos tiene un tamaño de aproximadamente 1 gb (según el archivo mdf de mi db). Mi servidor de base de datos tiene 4 gb de ram. Mirando el consumo de memoria en la computadora mientras está activo, se encuentra en alrededor del 85% de uso (incluido el sistema operativo, etc.)

¿Significa esto que toda la actividad de lectura de DB funciona solo en la memoria (es decir, toda la base de datos está en memoria)? ¿O todavía hay un caso en el que tendría que ir al disco?


fuente
1
Bueno, en comparación, ¿cuál es el uso cuando la aplicación no está activa? En general, uno de los beneficios de un sistema de base de datos es que no necesita el archivo completo en la memoria, pero se ajustará a lo que extraiga de la memoria hasta que lo vacíe en otro lugar. Voy a tener que declarar 'no'.
Grant Thomas
@Señor. Decepción: estoy de acuerdo en que es un beneficio, pero en el caso de que pueda guardar el archivo completo en la memoria (como este caso), ¿lo haría?
Si fuera necesario, entonces sí. Pero a pedido de las personas que llaman y los datos que requieren, no de forma nativa. Entonces, en general, si tiene un problema de memoria en la base de datos, será con el código de llamada o el software de soporte, o una combinación de ambos.
Grant Thomas
1
Un ejemplo de perspectiva: conozco una gran empresa de internet que posee varios sitios de portal muy grandes. Entregan ca. 300 millones de anuncios de sus propios servidores de anuncios para esos portales. La estructura de los servidores de anuncios es tal que hay un gran Oracle DB con toda la información para la contabilidad y la orientación, pero hay 32 grandes servidores (32 GB de RAM) que contienen bases de datos más pequeñas (con solo los anuncios activos actualmente) en RAM . No tocan un disco, no deben hacerlo: solo tienen 1/1000 segundos para encontrar un anuncio para colocarlo cuando llegue la consulta, cualquier acceso al disco haría imposible alcanzar ese objetivo.

Respuestas:

5

Sí, es probable que toda la base de datos esté almacenada en la memoria. Vaciará las páginas sucias al disco a intervalos de puntos de control. Sin embargo, tenga en cuenta que todas las actualizaciones tendrán que escribir en el registro y esperar a que los registros de registro se endurezcan en el almacenamiento duradero antes de la confirmación. Este documento básico de SQL Server 2000 I / O Basics tiene todos los detalles que necesitará y más.

Pero no tiene que adivinar, puede medir esto exactamente y ver si sucede o no. Los contadores de rendimiento relevantes son:

  • Esperanza de vida de la página Número de segundos que una página permanecerá en el grupo de búferes sin referencias.
  • Lecturas de página / seg. Número de lecturas de página de base de datos físicas que se emiten por segundo. Esta estadística muestra el número total de lecturas físicas de página en todas las bases de datos. Debido a que la E / S física es costosa, es posible que pueda minimizar el costo, ya sea utilizando un caché de datos más grande, índices inteligentes y consultas más eficientes, o cambiando el diseño de la base de datos.
  • Escrituras de página / seg. Número de escrituras físicas de página de base de datos emitidas por segundo.
Remus Rusanu
fuente
'Sí, es probable que toda la base de datos esté almacenada en la memoria'. Entonces, en el caso de nuestro servidor de producción, con un mínimo de ~ 60 sitios web que utilizan una base de datos dedicada dentro del SQL Server Master, donde incluso solo unos pocos de estos equivalen a un tamaño más grande que la memoria disponible de las máquinas, ¿cómo funciona? ? Estoy tentado a decir que no hay un incumplimiento definitivo, o la probabilidad de cualquiera de los escenarios: según un comentario anterior que hice, es realmente más dependiente del entorno que del motor.
Grant Thomas
@Señor. Decepción: estás aplicando mi respuesta a una pregunta diferente. El PO dijo: My database is about 1gb in size (according to the mdf file of my db). My database server has 4gb of ram.. Si desea una respuesta para el caso cuando tiene 60 sitios web y cómo funciona el almacenamiento en caché de la agrupación de almacenamiento intermedio en ese caso, entonces haga esa pregunta :)
Remus Rusanu
Usted es el experto aquí, pero disculpe mi naturaleza inquisitiva: ¿asume esta teoría (porque no tenemos datos específicos) que la máquina no está haciendo nada más? ¿O representa un cierto umbral de memoria utilizado por consumidores desconocidos?
Grant Thomas
Como ya he dicho: you don't have to guess, you can measure this exactly.
Remus Rusanu
-5

Toda la base de datos (es decir, los datos) no se almacenaría en la memoria (servidor sql). Después de examinar los índices y / o claves, recuperará un puntero a la ubicación del archivo de datos que está buscando y probablemente irá al disco para recuperarlos. Si no hay claves o índices, tendría que escanear todo el montón.

Dependiendo de la versión de SQL Server que esté ejecutando, puede haber estrategias para almacenar en caché datos bien utilizados para minimizar las lecturas de disco.

PUEDE obtener bases de datos en memoria, por ejemplo, la base de datos MySql Cluster ... Esto está diseñado para encajar TODO el db en la memoria a través de un grupo de servidores para alta disponibilidad / recuperación ante desastres y recuperación rápida de datos.


fuente
1
No tengo suficiente representante para rechazar esto, pero no estoy seguro de por qué estás diciendo que categóricamente no se almacenaría en la memoria. Una vez que se lee una página en la memoria caché del búfer, permanecerá allí hasta que la presión de la memoria interna o externa haga que la memoria caché se recorte.
Martin Smith