Entradas

Mostrando entradas de noviembre, 2011

SQL Server base de datos tempdb

Imagen
La base de datos del sistema tempdb es un recurso global disponible para todos los usuarios conectados a la instancia de SQL Server y se utiliza para incluir objetos de usuario temporales, objetos internos creados por el motor de base de datos de SQL Server y versiones de fila que se generan mediante transacciones. Por esta razón tener optimizada correctamente la configuración de esta base de datos es primordial para garantizar el rendimiento del sistema. Por ejemplo, si el tamaño de tempdb es demasiado pequeño, el procesamiento del sistema podría estar demasiado ocupado con el crecimiento automático de la base de datos y, por tanto, no podría satisfacer las necesidades de carga de trabajo cada vez que se inicia SQL Server. Para obtener más información, vea Optimizar el rendimiento de tempdb y Planeamiento de capacidad para tempdb . Otro factor de optimización a tener en cuenta es el número de archivos de datos de tempdb que debe ser igual al número de núcleos de CPU utilizada

SQL Server alineación de discos

Imagen
La alineación del disco (Disk Alignment) puede tener un impacto significativo en el rendimiento del servidor. Una partición mal alineada sufre de un desfase entre los sectores lógicos y los físicos, aumentando así las operaciones de entrada / salida en un disco reduciendo su rendimiento. En una sola partición independiente, el problema no es tan grave, ya que tanto el sistema operativo como los programas funcionan sin inconveniente alguno. Pero bajo determinadas configuraciones, (por ejemplo, discos en modo RAID), la pérdida de rendimiento puede llegar a ser notable. Puesto que la configuración adecuada puede variar mucho según el fabricante, debes consultar con los manuales de cada uno para verificar la correcta alineación del disco y la configuración adecuada. Para el caso específico de un servidor de datos como SQL Server, la asignación o el ancho de banda debe ser mayor o igual a 8k, para evitar páginas mal alineadas o cortadas, se recomienda que esta cifra sea de 64k para que c

SQL Server: acceso exclusivo a la base de datos

Imagen
Muchas de las operaciones que se realizan sobre las bases de datos de SQL Server requieren el uso exclusivo de esta base de datos por parte del usuario que está ejecutando el proceso o la tarea, una de ella puede ser la restauración de la misma desde un backup. Por ser un requerimiento común es muy normal recibir este mensaje de error: Exclusive access could not be obtained because the database is in use Corregirlo no suele ser muy sencillo, más bien todo lo contrario y depende de los accesos que tenga esa base de datos, aquí os dejaré algunos pasos para identificar e intentar garantizar ese acceso exclusivo . Lo primero que debemos hacer es terminar todas las conexiones existentes a la base de datos y ello lo haremos con la siguiente instrucción: USE database GO ALTER DATABASE database SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO ALTER DATABASE database SET MULTI_USER GO También podemos ejecutar esta opción utilizando el procedimiento almacenado sp_dboption: Use master go sp_db

SQL Server: listados de bases de datos y tablas

Imagen
Para saber cuales son todas las bases de datos de un servidor SQL Server tenemos estas dos opciones: EXEC sp_helpdb SELECT * FROM master.dbo.sysdatabases; Ambas nos devuelven el mismo listado lo único que cambia son los datos que nos muestran, la consulta SQL es mucho más amplia en datos que el procedimiento almacenado. Importante: ambas deben de ser ejecutadas bajo master: USE master GO. Para saber cuales son todas las tablas de una base de datos en SQL Server lo primero que debes hacer es tener abierta la ventana de consulta bajo tu base de datos (USE DB_name) y luego ejecutar una de estas dos opciones: EXEC sp_tables SELECT * FROM information_schema.tables; Y por último para saber todas las columnas de una tabla en SQL Server puedes ejecutar el procedimiento almacenado sp_columns. Las opciones son ilimitadas y ahora también existe la posibilidad de generar un solo archivo SQL que puede extraer todo lo que necesitas incluso extraer aparte de todas las estructuras, todo los

SQL Server: reorganizar y volver a generar índices

Imagen
Según la propia Microsoft : El Motor de base de datos de SQL Server mantiene índices automáticamente cada vez que inserta, actualiza o elimina operaciones realizadas en los datos subyacentes. Con el tiempo, estas modificaciones pueden hacer que la información del índice se disperse por la base de datos (se fragmente). La fragmentación ocurre cuando los índices tienen páginas en las que la ordenación lógica, basada en el valor de clave, no coincide con la ordenación física dentro del archivo de datos. Los índices muy fragmentados pueden reducir el rendimiento de la consulta y ralentizar la respuesta de la aplicación. Se puede solucionar la fragmentación del índice reorganizándolo o volviéndolo a generar pero el primer paso es identificar los índices fragmentados, para ello podemos ejecutar la siguiente consulta SQL que nos sacará un listado de los índices, las tablas a las que pertenecen y el nivel de fragmentación de los mismos: SELECT a.object_id as table_id, OBJECT_NAME(a.object

Algunos cambios en PHP a partir de la 5.3

Imagen
Los que migramos PHP de la versión 5.2.x a cualquiera superior a la 5.3 nos encontramos en el log con algunos errores y alertas que en realidad son muy sencillos de corregir, en este post veremos dos: safe mode y default time zone. PHP Deprecated:  Directive 'safe_mode' is deprecated in PHP 5.3 and greater El modo seguro de PHP era un intento de resolver el problema de seguridad en un servidor compartido pero a partir de la versión 5.3 de PHP se dieron cuenta los desarrolladores que es arquitectónicamente incorrecto tratar de resolver este problema a nivel de PHP y como consecuencia han quedado deprecadas estas funciones. Para corregir este error debemos ir al archivo php.ini y editar la directiva Safe Mode de esta forma: ; Safe Mode ; safe_mode = Off PHP Warning:  date(): It is not safe to rely on the system's timezone settings. El error completo es el siguiente: You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In ca

Desventajas de minimizar código JavaScript con Minify

Imagen
Minify es una utilidad escrita en PHP5 que permite eliminar los caracteres innecesarios del código fuente sin cambiar su funcionalidad permitiendo incluir en una sola línea de código múltiples archivos JavaScript o CSS reduciendo con ello el tiempo de carga de nuestra página web. Pero todo lo que brilla no es oro y aunque llevo tiempo utilizando Minify hay algunas pegas a tener en cuenta: 1.- hay que tenerlo instalado en el entorno real y en el de desarrollo porque sino a la hora de combinar los archivos hay que estar descartando estas líneas de código 2.- los debuggers de los principales navegadores son incapaces de encontrar correctamente el archivo y en algunos casos la línea de error cuando se produce un fallo en JavaScript lo cual hace más complicada la tarea de corrección de errores 3.- puede dar problemas con las codificaciones de los archivos comprimidos 4.- debes tener configurado apache correctamente con una librería adicional (redirect) que no viene instalada por defecto 5

Preparar y ejecutar consultas con SQL Server driver para PHP

Imagen
Los que acostumbramos a utilizar MySQL no estamos familiarizados con esta sintaxis de preparar y ejecutar consultas que tiene el driver de Microsoft para PHP. En este post intento mostrar cómo usar el driver de SQL Server para PHP para ejecutar una instrucción preparada varias veces. Esto es mediante la combinación de sqlsrv_prepare y sqlsrv_execute , y el resultado es una instrucción que se compila una vez en el servidor y se puede ejecutar después varias veces con distintos valores de parámetro. En el caso de consultas únicas, se recomienda el uso de sqlsrv_query que es a lo que estamos acostumbrados en MySQL. Al preparar una instrucción que usa variables como parámetros, las variables se enlazan a la instrucción. Eso significa que si se actualizan los valores de las variables, la próxima vez que se ejecute la instrucción se ejecutará con los valores de parámetros actualizados. En el siguiente enlace tenemos un ejemplo de cómo utilizar estas funciones para ejecutar una consul