Mostrando las entradas con la etiqueta Rendimiento. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Rendimiento. Mostrar todas las entradas

jueves, 8 de junio de 2023

SQL Server Conociendo sobre CHECKPOINT

Introducción

Mucha gente tiende a preguntarse, ¿cómo es que la base de datos se mantiene actualizada, aún después de tener un evento de falla de energía, sin que diera tiempo de guardar los cambios? Es bien sabido que un manejador de base de datos relacional maneja mucha información en memoria, por lo que cuando se lleva a cabo una consulta de información de manera frecuente, la respuesta es casi inmediata. Ahora bien, es posible que la información sea actualizada, ya sea por la modificación de la información ya previamente registrada o el ingreso de nueva información, por lo que se requiere mantener un mecanismo que apoye que la información que se encuentre en memoria, esta sea escrita en los discos, de tal forma que la información este sincronizada. Por ello se utiliza un checkpoint.

¿Cómo funciona el Checkpoint?


Un Checkpoint (punto de control) se crea como un punto bien conocido desde el cual el Motor de base de datos de Microsoft SQL Server puede comenzar aplicando los cambios contenidos en el registro durante la recuperación después de un apagado del servidor o un bloqueo inesperado. Por lo tanto, un punto de control escribe las páginas modificadas que están actualmente en la memoria (conocidas como páginas desactualizadas) y la información del registro de transacciones de la memoria al disco y registra la información en el registro de transacciones. Es por motivos de rendimiento que Motor de base de datos realiza modificaciones en las páginas de la base de datos en la memoria caché del búfer y no escribe estas páginas en el disco después de cada cambio.

Representacion del concepto de Checkpoint 

Tipos de Checkpoint

Es posible indicar que el proceso de punto de control se puede categorizar en los siguientes tipos:

  • Automático – Es un proceso en segundo plano realizado por defecto, este tipo está asociado a la opción de configuración del servidor “intervalo de recuperación”. El valor predeterminado se establece en cero, lo que significa un objetivo de un minuto. Esta es una opción de configuración avanzada. Esta opción solo está disponible para entornos locales e IaaS. Para modificar el valor de “intervalo de recuperación” ejecute los siguientes comandos:

sp_configure 'show advanced options', 1 

RECONFIGURE with override 

go 

sp_configure 'recovery interval', '<seconds>' 

go
sp_configure 'show advanced options', 0 
RECONFIGURE with override 
 

  • Interno - esto ocurre en algunos eventos clave en Microsoft SQL Server, como durante un proceso de copia de seguridad de la base de datos o cuando se crea una instantánea de la base de datos, incluido el proceso creado por un comando DBCC CHECKDB. Otro proceso que puede generar un punto de control interno es el cierre de los servicios de Microsoft SQL Server. Es importante indicar que estos procesos internos de puntos de control no pueden ser controlados por un DBA.


  • Manual - esto se hace ejecutando el comando T-SQL CHECKPOINT, el comando se ejecuta en la base de datos seleccionada. Cuando ejecuta el comando Transact-SQL CHECKPOINT, el punto de control manual se produce en la conexión de base de datos actual. De forma predeterminada, los puntos de control manuales se ejecutan hasta su finalización. Opcionalmente, el parámetro de duración del punto de control se puede indicar para especificar una cantidad de tiempo solicitada, en segundos, para que se complete el punto de control. El comando para hacer el punto de control manual es:

 

USE [master]; 

GO 

CHECKPOINT <checkpoint_duration_in_Seconds> 

GO; 

 

  • Indirecto - a partir de Microsoft SQL Server 2012, esta función se agregó a las propiedades de la base de datos, de esta manera, es posible indicar el tiempo de recuperación objetivo para una base de datos, independientemente de la recuperación objetivo indicada para el servidor. Esta opción solo se puede usar en entornos locales e IaaS. Para especificar el tiempo de recuperación objetivo, use el comando ALTER DATABASE de la siguiente manera:

ALTER DATABASE [Database name]  

        SET TARGET_RECOVERY_TIME = <Duration_Seconds> SECONDS; 

Hay que tener cuidado al usar esta sentencia, el valor predeterminado es cero, lo que significa que el checkpoint ocurre cada minuto, igual a la opción de valor de tiempo de recuperación. Sin embargo, si el tiempo de recuperación objetivo se establece en cero y el valor del intervalo de recuperación se establece mayor a cero, el punto de control automático se toma de la opción de intervalo de recuperación. Finalmente, si el tiempo de recuperación objetivo es mayor que cero, el punto de control indirecto entra en vigor y los valores del intervalo de recuperación no se aplican.


Conclusión


Como resumen, un proceso de Checkpoint escribe todas las páginas sucias, disponibles en el caché del búfer, y los registros de transacciones en el disco, en un archivo de datos. El proceso también registra la información del checkpoint en el registro de transacciones.

jueves, 14 de enero de 2021

SQL Server Propiedades de Base de Datos – Opciones (1)

Introducción

Ya he indicado previamente sobre las propiedades de las bases de datos y he indicado las paginas General, Archivos y Grupos de Archivos en previas entregas, ahora iniciare con las distintas opciones de configuración de las bases de datos. 

Página Opciones

Es posible utilizar esta página para ver o modificar varias opciones de configuración para la base de datos seleccionada. Sin embargo, es necesario tener en cuenta que puede usar las declaraciones de Transact-SQL ALTER DATABASE SET OPTIONS o ALTER DATABASE SCOPED CONFIGURATION, para modificar los valores si se prefiere.

En esta página es posible obtener o modificar el valor de las opciones en las siguientes categorías:

  • Automático
  • Contención
  • Cursor
  • Configuraciones del alcance de la base de datos
  • FILESTREAM
  • Varios
  • Recuperación
  • Agente de servicios
  • Estado

En esta entrega comentaré las tres primeras categorías y las demás se indicarán en subsecuentes entregas.

La pagina opciones se muestra a continuación:

 


En la parte superior aparecen los siguientes valores de configuración de la base de datos: 

Colación - Indica la intercalación actual de la base de datos seleccionando, es posible cambiar este valor seleccionándolo de la lista. Debe recordarse que una base de datos que una base de datos que se mueve de un servidor a otro, ésta conserva la intercalación donde fue creada la base de datos. Es importante indicar que Microsoft recomienda que las bases de datos alojadas en el servidor mantengan la intercalación igual a la que se maneja en la base de datos master.

Modelo de recuperación - Indica el modelo de recuperación actual de la base de datos, asimismo es posible establecer un modelo diferente, seleccionando de la lista alguno de los siguientes valores; Completo, Registro-masivo o Simple. Debe recordarse que Microsoft recomienda que las bases de datos de ambiente productivo deben mantener el modelo de recuperación Completo.

Nivel de compatibilidad - Indica la versión de Microsoft SQL Server que admite actualmente la base de datos.  Debe recordarse que cuando se actualiza una base de datos en Microsoft SQL Server, el nivel de compatibilidad de esa base de datos se conserva, si es posible, o se cambia al nivel mínimo compatible con el nuevo Microsoft SQL Server.

Tipo de contención – muestra el valor actual de la base de datos. Se puede especificar uno de los siguientes valores Ninguno o Parcial, este ultimo sirve para designar que se trata de una base de datos contenida. Esta opción apareció por primera vez en Microsoft SQL Server 2012, y establece que una base de datos puede manejar su permiso de acceso a los usuarios que están contenidos en la base de datos, pero que no cuentan con un permiso de acceso en el servidor. Se requiere que la propiedad del servidor Habilitar bases de datos contenidas se establezca en TRUE antes de que una base de datos pueda configurarse como contenida.

La parte inferior muestra una cuadricula con las categorías de las opciones, a continuación, se indican cada una de ellas.

Automático

Esta categoría de opciones es usada para establecer acciones automáticas que se llevan a cabo, por parte del servicio, en la base de datos. Los valores posibles de estas opciones son Falso o Verdadero.

Auto cerrado – Indica si la base de datos se apaga y libera recursos después de que el último usuario cierra su sesión. Recuerde que esta opción debe mantenerse en falso, en ambientes productivos, además de que esta opción se recomienda en valor verdadero para bases de datos en ambientes móviles.

Crear automáticamente estadísticas incrementales - Indica el uso de la opción incremental cuando se crean estadísticas por partición..

Crear estadísticas automáticamente - Indica si se crean automáticamente las estadísticas de optimización faltantes que requieren alguna consulta, por lo que para la optimización se crean automáticamente.

Contracción automática – Indica si los archivos de la base de datos están disponibles para la reducción periódica. Es recomendable que en ambiente productivo se mantenga esta opción en falso.

Estadísticas de actualización automática – Indica si la base de datos actualiza automáticamente las estadísticas de optimización desactualizadas que necesita una consulta para la optimización.

Actualización automática de estadísticas de forma asincrónica – Indica si las consultas que inician una actualización automática de estadísticas desactualizadas no esperan a que se actualicen las estadísticas antes de compilar. Las consultas posteriores utilizan las estadísticas actualizadas cuando están disponibles. Si se establecer esta opción en Verdadero no tiene efecto a menos que la opción Estadísticas de actualización automática también se establezcan en Verdadero.

Contención

En una base de datos contenida o independiente, algunas opciones que se configuran normalmente en el nivel del servidor se pueden configurar en el nivel de la base de datos.

LCID de idioma de texto completo predeterminado - Muestra el idioma predeterminado para las columnas indexadas de texto completo. El análisis lingüístico de datos indexados de texto completo depende del idioma de los datos. El valor predeterminado de esta opción es el idioma del servidor. 

Idioma predeterminado – Muestra el idioma predeterminado para todos los nuevos usuarios de bases de datos contenidas, a menos que se especifique lo contrario.

Activadores anidados habilitados – Muestra si los disparadores activan otros disparadores. Los disparadores se pueden anidar hasta un máximo de 32 niveles. 

Transformar palabras ruidosas – Muestra si se suprime un mensaje de error si las palabras irrelevantes, es decir, palabras vacías, hacen que una operación booleana en una consulta de texto completo devuelva cero filas. 

Límite de año de dos dígitos – Indica el número de año más alto que se puede ingresar como un año de dos dígitos. El año indicado y los 99 años anteriores se pueden ingresar como un año de dos dígitos. Todos los demás años deben ingresarse como un año de cuatro dígitos. Por ejemplo, la configuración predeterminada de 2049 indica que una fecha ingresada como '14/3/49' se interpretará como 14 de marzo de 2049 y una fecha ingresada como '14/3/50' se interpretará como 14 de marzo de 1950. Para obtener más información, consulte Configurar la opción de configuración del servidor de corte de año de dos dígitos.

Cursor

Esta categoría de opciones tiene el alcance del uso de cursores de Transact-SQL. Los valores posibles de estas opciones son Falso o Verdadero.

Cerrar el cursor al confirmar habilitado - Indica si los cursores se cierran después de que la transacción que abre el cursor se ha confirmado. Con valor Verdadero, todos los cursores que están abiertos cuando se confirma o deshace una transacción se cierran. En contraste, si es Falso, estos cursores permanecen abiertos cuando se confirma una transacción. 

Cursor predeterminado - Indica el comportamiento predeterminado del cursor. Con un valor Verdadero, las declaraciones del cursor son por defecto LOCAL. Con un valor de Falso, los cursores se establecen de forma predeterminada en GLOBAL.

Conclusión

Esta página de propiedades de la base de datos brinda información de las opciones de la base de datos. Si se requiere usar T-SQL para obtener la información que se muestra en la pagina indicada, es posible usar las siguientes consultas.

/*******************************************************************************
-- Script : Get Database Options Properties Part 1 
-- Author : Julio J Bueyes
-- julio.bueyes@outlook.com
--
-- Description : This script helps to get a detailed view of the database properties – Options page – part 1.
--
-- DISCLAIMER. This Code is provided for the purpose of illustration only and is not intended to be used in a production environment. 
--
-- THIS CODE AND ANY RELATED INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, 
-- INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************************/
-- Set the Database Name required
USE model;
GO

-- Header Page
SELECT collation_name AS [Collation],
    recovery_model_desc AS [Recovery model],
    CASE compatibility_level WHEN 80 THEN 'SQL Server 2000 (80)'
                            WHEN 90 THEN 'SQL Server 2005 (90)'
                            WHEN 100 THEN 'SQL Server 2008 (100)'
                            WHEN 110 THEN 'SQL Server 2012 (110)'
                            WHEN 120 THEN 'SQL Server 2014 (120)'
                            WHEN 130 THEN 'SQL Server 2016 (130)'
                            WHEN 140 THEN 'SQL Server 2017 (140)'
                            WHEN 150 THEN 'SQL Server 2019 / Azure SQL Database (150)'
                            ELSE 'SQL Server ' END AS [Compatibility level],
    containment_desc AS [Containment type]
FROM sys.databases
WHERE database_id = DB_ID();

--- Automatic Options
SELECT CASE is_auto_close_on WHEN 1 THEN 'True' ELSE 'False' END AS [Auto Close], 
    CASE is_auto_create_stats_incremental_on WHEN 1 THEN 'True' ELSE 'False' END AS [Auto Close Incremental Statistics],
    CASE is_auto_create_stats_on WHEN 1 THEN 'True' ELSE 'False' END AS [Auto Create Statistics], 
    CASE is_auto_shrink_on WHEN 1 THEN 'True' ELSE 'False' END AS [Auto Shrink], 
    CASE is_auto_update_stats_on WHEN 1 THEN 'True' ELSE 'False' END AS [Auto Update Statistics], 
    CASE is_auto_update_stats_async_on WHEN 1 THEN 'True' ELSE 'False' END AS [Auto Update Statistics Asyncronously]
FROM sys.databases
WHERE database_id = DB_ID();

--- Containment Options
SELECT CASE ISNULL(default_fulltext_language_lcid,0) WHEN 0 THEN (SELECT value_in_use FROM sys.configurations WHERE configuration_id = 1126) ELSE default_language_lcid END AS [Default Fulltext Language LCID], 
        CASE ISNULL(default_language_name,0) WHEN 0 THEN (SELECT CASE value_in_use WHEN 0 THEN 'English' END FROM sys.configurations WHERE configuration_id = 124) ELSE default_language_name END AS [Default Language], 
        CASE ISNULL(is_nested_triggers_on,0) WHEN 0 THEN (SELECT CASE value_in_use WHEN 1 THEN 'True' ELSE 'False' END FROM sys.configurations WHERE configuration_id = 115) ELSE CASE is_nested_triggers_on WHEN 1 THEN 'True' ELSE 'False' END END AS [Nested Triggers Enabled], 
        CASE ISNULL(is_transform_noise_words_on,0) WHEN 0 THEN (SELECT CASE value_in_use WHEN 1 THEN 'True' ELSE 'False' END FROM sys.configurations WHERE configuration_id = 1555) ELSE CASE is_transform_noise_words_on WHEN 1 THEN 'True' ELSE 'False' END END AS [Transform Noise Words], 
        CASE ISNULL(two_digit_year_cutoff,0) WHEN 0 THEN (SELECT value_in_use FROM sys.configurations WHERE configuration_id = 1127) ELSE two_digit_year_cutoff END AS [Two Digit Year Cutoff]
FROM sys.databases db
WHERE database_id = DB_ID();

--- Cursor Options
SELECT CASE is_cursor_close_on_commit_on WHEN 1 THEN 'True' ELSE 'False' END AS [Close Cursor on Commit Enabled], 
    CASE is_local_cursor_default WHEN 1 THEN 'LOCAL' ELSE 'GLOBAL' END AS [Default Cursor]
FROM sys.databases
WHERE database_id = DB_ID();

Como puede observarse es muy fácil obtener los datos directamente de la ventana de propiedades de la base de datos, en la página Opciones, no obstante, el script funciona para obtener los mismos valores proporcionados por la página.


miércoles, 19 de agosto de 2020

El Regulador de Recursos de SQL Server

Regulador de Recursos

Introducción

A partir de la presentación de Microsoft SQL Server 2008, se puede encontrar el regulador de recursos, cuya característica es que se puede utilizar para administrar la carga de trabajo y el consumo de recursos del sistema dentro de una instancia de Microsoft SQL Server. El regulador de recursos le permite especificar límites en el número de CPU, Entradas/Salidas físicas y memoria que pueden usar las solicitudes de aplicaciones entrantes, regulación de los recursos de E/S físicas, es posible administrarlos desde Microsoft SQL Server 2016.


Regulación de Recursos

En el contexto del regulador de recursos, la carga de trabajo es un conjunto de consultas o solicitudes de tamaño similar que pueden y deben tratarse como una sola entidad. Esto no es un requisito, pero cuanto más uniforme sea el patrón de uso de recursos de una carga de trabajo, más beneficios obtendrá del regulador de recursos. Los límites de recursos se pueden reconfigurar en tiempo real con un impacto mínimo en las cargas de trabajo en ejecución.


En un entorno en el que hay varias cargas de trabajo diferentes en el mismo servidor, el regulador de recursos permite diferenciar estas cargas de trabajo y asignar recursos compartidos según se solicite, según los límites que especifique. Como se indicó anteriormente, estos recursos son CPU, Entrada/Salida física y memoria.


Los siguientes tres conceptos son fundamentales para comprender y utilizar el regulador de recursos (Resource Governor):


➢ Grupos de recursos. Un grupo de recursos representa los recursos físicos del servidor. Debe imaginarse un grupo como una instancia virtual de Microsoft SQL Server dentro de una instancia real de Microsoft SQL Server.


➢ Grupos de carga de trabajo. Un grupo de carga de trabajo sirve como contenedor para solicitudes de sesión con criterios de clasificación similares. Una carga de trabajo permite el monitoreo agregado de las sesiones y define las políticas que deben seguir estas sesiones.


➢ Clasificación. El proceso de clasificación asigna sesiones entrantes a un grupo de carga de trabajo en función de las características de la sesión. Adapte la lógica de clasificación escribiendo una función definida por el usuario, llamada función clasificadora.


El regulador de recursos (Resource Governor) se encuentra localizado en el grupo de administración en SQL Server Management Studio. La siguiente imagen muestra la ubicación y las propiedades reales:



El gobernador de recursos funciona de la siguiente manera:

➢ Cuando llega una conexión a través de una sesión:
    * Se clasifica según la función de clasificación,
    * Pasará al grupo de carga de trabajo correspondiente, 
    * Utilizará el pool de recursos asociado, 
    * El grupo de recursos proporciona y limita el uso de los recursos requeridos por la aplicación, según se ha definido.

El regulador de recursos está deshabilitado de forma predeterminada y usará y asignará el grupo de carga de trabajo predeterminado y el grupo predeterminado, como se ve en la última imagen.

Conclusión

El regulador de recursos es una buena herramienta que permite asignar los recursos del sistema a los procesos que se identifican como críticos. En términos generales, siempre se puede utilizar el proporcionado por omisión (default), de tal forma que todos los procesos se ejecutaran de forma similar. No obstante, es imprescindible que se identifiquen los procesos o aplicaciones que deban ejecutarse de forma prioritaria y crear y asignar los recursos necesarios a estos.