Buscar este blog

martes, 13 de noviembre de 2012

Script para obtener el tamaño de todas las tablas de la base de datos

En algunas ocasiones podemos vernos con la necesidad de conocer qué tablas de nuestra base de datos están ocupando más espacio en disco. Por ejemplo, si disponemos de SQL Server Express, cuyas bases de datos están limitadas a 4GB o 10GB, según la versión que estemos usando -4, hasta 2005; 10, a partir de 2008-, aparte de usar las opciones de comprimir la base de datos, poner el log en el modo simple de recuperación o ajustar las políticas de crecimiento automático de nuestros ficheros, podemos necesitar averiguar qué tablas crecen más para tomar las decisiones oportunas.

viernes, 19 de octubre de 2012

Nuevo modo de autocompletado para IntelliSense en SQL Server Management Studio 2012. ¿Cómo cambiarlo?

Con SQL Server 2008 llegó IntelliSense para T-SQL. IntelliSense es una herramienta que nos ofrece el editor de SQL Server Management Studio para facilitarnos la escritura de código T-SQL. Básicamente, entre otras cosas, carga el catálogo de nuestra base de datos para facilitarnos la escritura de consultas.

miércoles, 10 de octubre de 2012

Listar todos los ficheros de un servidor SQL Server

Existen multitud de vistas de sistema en SQL Server que nos ayudan a hacer las tareas de administración y mantenimiento mucho más sencillas. Una de ellas nos permite listar todos los ficheros, tanto de datos como de log, relativos a las bases de datos que tenemos en nuestro servidor.

Para ello, usaremos la vista sys.master_files, que nos proporciona información de cada uno de los ficheros de nuestras bases de datos, con todas sus propiedades. Algunas de ellas, incluidas en la consulta de ejemplo, son: nombre del fichero, ruta completa del fichero en disco, tamaño, estado y configuración sobre su crecimiento, del que ya hablamos en posts anteriores.

Actualizado el 19 de septiembre de 2013: Ahora el script muestra el tamaño de los ficheros en Megabytes, mientras que, anteriormente, lo hacía en número de páginas de 8KB.

TABLESAMPLE, o cómo obtener una muestra aleatoria de registros de una tabla

¿Alguna vez has necesitado obtener una muestra de datos totalmente aleatoria de tu base de datos? En SQL Server es posible hacerlo, mediante la cláusula TABLESAMPLE, que se aplica a la definición del origen de datos que vamos a recuperar con la cláusula FROM.

TABLESAMPLE nos permite indicar un número de filas o un porcentaje de filas a devolver, de la siguiente manera:

--devuelve el 10% de las filas totales
--(dependiendo del tamaño de los registros en la base de datos, no del número de filas).
SELECT *
FROM YourTable
TABLESAMPLE (10 PERCENT) 
--devuelve una muestra de 15 filas del conjunto de resultados
SELECT *
FROM YourTable
TABLESAMPLE (15 ROWS) 

Algunas consideraciones a la hora de usar TABLESAMPLE incluyen:
  • No se puede usar en la definición de vistas
  • No se puede usar en la definición de funciones de tabla inline
  • No se puede aplicar a tablas devueltas por funciones tipo tabla

miércoles, 3 de octubre de 2012

¡Ganador del premio por resolver los puzzles T-SQL!

Pinal Dave ha anunciado a través de twitter el ganador del premio por resolver los dos puzzles SQL que planteaba ahora hace unos días, y de los que nos hicimos eco en este mismo blog. Pues bien, parece que nuestras respuestas eran correctas :)



jueves, 27 de septiembre de 2012

Puzzles en T-SQL ¿te atreves a encontrar la respuesta?

Recientemente, Pinal Dave publicó en su blog SQL Authority un post con dos puzzles para Transact SQL. La curiosidad nos hizo intentar averiguar las respuestas, y aquí va lo que descubrimos (podéis intentar adivinarlas antes de leer la solución):

jueves, 6 de septiembre de 2012

Cómo determinar la clave primaria en una entidad con Entity Framework y Data Annotations

Con Entity Framework 4.1, a las opciones del modelo primero (Model First) y base de datos primero (Database First), se añadió Code First. Con esta aproximación, el programador escribe clases (objetos POCO) para cada una de las entidades que quiere manejar en su aplicación. Estas entidades pueden generar tablas en una nueva base de datos o ser mapeadas a una base de datos ya existente.

En general, EF usa una serie de convenciones para definir el modelo y mapearlo a la base de datos de forma automática. Por ejemplo, Entity Framework puede reconocer automáticamente el campo que es clave primaria de una tabla si éste se llama de la forma NombreTablaId

lunes, 27 de agosto de 2012

Cómo cambiar los valores por defecto de una base de datos

Cuando creamos una nueva base de datos en SQL Server, ésta se configura con una serie de valores por defecto. Las preguntas que nos hacemos son:

  • ¿De dónde salen esos valores?
  • ¿Se pueden modificar?


martes, 21 de agosto de 2012

Crecimiento automático de los ficheros de la base de datos

Una de las configuraciones que debemos revisar en nuestras bases de datos es la que corresponde a los parámetros de crecimiento automático (autogrowth) de sus ficheros.

Nuestras bases de datos crecen con el uso y SQL Server reserva espacio en disco duro para los ficheros que la componen, pidiéndole al sistema operativo más espacio cuando el que tenía asignado deja de estar disponible. Cada vez que esto ocurre, el rendimiento de nuestra base de datos se ve afectado, ya que el servidor debe bloquear la actividad en ella mientras obtiene el nuevo espacio. Así pues, es deseable configurar las opciones de crecimiento de los ficheros de la base de datos de tal manera que:
  • Los eventos de crecimiento ocurran con poca frecuencia
  • No nos excedamos en la cantidad de disco reservada a los ficheros de una base de datos, ya que podría no ser necesario y estaríamos consumiendo recursos útiles para otras bases de datos en el mismo disco o sistema de discos.

lunes, 6 de agosto de 2012

Mantenimiento de índices en SQL Server: cómo evitar la fragmentación

Los índices son objetos de la base de datos diseñados de manera similar a los índices que usamos en los libros para encontrar contenidos en el mismo.

Éstos ordenan los datos en nuestras tablas, permitiendo un acceso más rápido y eficiente a aquéllos que estemos consultando, modificando o eliminando.

Por ello, la actualización de los registro de las tablas de la base datos, obliga al servidor SQL a realizar ciertas operaciones que nos garanticen el orden de los datos en los índices. Debido a esta actualización, la información almacenada en los índices se ve fragmentada con su uso. Esta fragmentación depende de parámetros como el fill factor, número de páginas, tamaño del índice y frecuencia de actualización.

En definitiva, un índice sobre un tabla, debido a actualizaciones sobre ésta, puede perder eficacia y, con ello,  nuestras consultas volverse más lentas y su rendimiento deteriorarse.

miércoles, 30 de mayo de 2012

SEQUENCE, nuevo objeto en SQL Server 2012 ¿Sustituto de Identity?

SQL Server 2012 lleva tan solo unas semanas entre nosotros y, como ocurre con cada nueva versión de un producto, lo primero en lo que nos hemos fijado es en sus novedades.

En lo que se refiere a su lenguaje de programación, el Transact SQL, la que más nos llama la atención es la introducción de las Secuencias, o SEQUENCE.

miércoles, 15 de febrero de 2012

ROW_NUMBER, o cómo obtener la enésima fila de un conjunto de resultados

En ocasiones podemos querer obtener un resultado que sea un subconjunto de otro resultado, ordenado de una forma concreta.

Además de la cláusula TOP (que nos permite obtener un número o porcentaje concreto de filas sobre el total), SQL Server vio como se le añadían las funciones de ranking a partir de su versión de 2005.

Una posible aplicación de ellas serviría para resolver la siguiente cuestión: ¿Cómo devolver la enésima fila de un conjunto de resultados?