Thursday, March 23, 2017

SQL Server 2016 Stretch Databases

El SQL Server Stretch Database permite que los datos históricos o de bitácoras puedan ser movidos hacia Azure, específicamente permite mover datos de bitácoras, históricas, o de eventos desde un almacenamiento más caros hacia un almacenamiento distinto en Azure.

En el siguiente script vemos cómo configurar Stretch Databases.



-- Borrar Recursos Azure

-------------------------------------------------
-- COMO CONFIGURAR STRETCH DATABASE POR SCRIPT
-------------------------------------------------

USE [master]
GO

IF DB_ID('StretchDB') IS NOT NULL BEGIN
    ALTER DATABASE StretchDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    DROP DATABASE StretchDB
END
GO

CREATE DATABASE StretchDB /* COLLATE Cyrillic_General_CI_AS */
GO

USE StretchDB
GO

DROP TABLE IF EXISTS dbo.ErrorLog

CREATE TABLE dbo.ErrorLog (
      LogID INT PRIMARY KEY
    , PostTime DATETIME NOT NULL
    , UserName NVARCHAR(100) NOT NULL
    , ErrorMessage NVARCHAR(MAX) NOT NULL
)
GO

INSERT INTO dbo.ErrorLog (LogID ,PostTime, UserName, ErrorMessage)
VALUES (1, GETDATE(), N'edocastro', N'Fila en Azure')


-- Empezar a configurar Stretch Database

USE StretchDB
GO

EXEC sp_configure 'remote data archive';

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'CostaRicaPa$$w0rd'
GO

-- DROP DATABASE SCOPED CREDENTIAL CredencialAzure

CREATE DATABASE SCOPED CREDENTIAL CredencialAzure
WITH IDENTITY = N'edocastro', SECRET = N'CostaRicaPa$$w0rd'
GO

-- Verificar la consola de Azure Portal
-- Verificar el Firewall

ALTER DATABASE StretchDB
    SET REMOTE_DATA_ARCHIVE = ON (
            SERVER = 'democostarica.database.windows.net',
            CREDENTIAL = CredencialAzure
        )
GO

ALTER TABLE dbo.ErrorLog
    SET (REMOTE_DATA_ARCHIVE = ON (MIGRATION_STATE = OUTBOUND))


-- Deshabilitar Stretch Databases con el Wizard

-- CASO EN QUE DESEAMOS FILTRAR LOS DATOS QUE SEA HACEN STRETCH
-- USO DE FUNCIONES PERSONALIZADAS

CREATE FUNCTION dbo.fn_stretchpredicate (@EnviarStretch BIT)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
    SELECT 1 AS is_eligible
    WHERE @EnviarStretch= 1
GO

ALTER TABLE dbo.ErrorLog ADD EnviarStretch BIT
GO

-- Ahora vamos a crear otra vez el Stretch Database
-- con el filtro especificado por funcion personalizada

ALTER TABLE dbo.ErrorLog SET (
    REMOTE_DATA_ARCHIVE = ON (
        FILTER_PREDICATE = dbo.fn_stretchpredicate(EnviarStretch),
        MIGRATION_STATE = OUTBOUND
    )
)


-- Deshabilitar Stretch Database

USE StretchDB;
GO

-- El siguiente ejemplo deshabilita Stretch Database
-- Los datos se bajan de Azure hacia la tabla local

ALTER TABLE dbo.ErrorLog
   SET ( REMOTE_DATA_ARCHIVE ( MIGRATION_STATE = INBOUND ) ) ;
GO

-- El siguiente ejemplo deshabilita Stretch Database
-- Los datos se dejan en Azure

ALTER TABLE dbo.ErrorLog
   SET ( REMOTE_DATA_ARCHIVE = OFF_WITHOUT_DATA_RECOVERY ( MIGRATION_STATE = PAUSED ) ) ;
GO

-- Deshabilitarlo para la base de datos
ALTER DATABASE StretchDB
    SET REMOTE_DATA_ARCHIVE = OFF ;


Thursday, March 02, 2017

Sql server 2016 incluye características para ejecutar scripts de analítica avanzada dentro de la base de datos estos scripts son basados en el lenguaje R.

En este blog post vamos a ver cuáles son las vistas administrativas que podemos utilizar para poder monitorear el desempeño de nuestro servidor.

estas vistas administrativas nos dan información acerca de la cantidad de Script que se están ejecutando en este momento así como la duración de cada uno de ellos,  de esta forma podemos determinar Cuál es el impacto que tiene la ejecución de Scripts de R dentro de nuestra instancia de base de datos.

A continuación mostramos las vistas administrativas más comunes para monitorear el desempeño de los R Scripts.

-- DMV sys.dm_os_performance_counters
--  esta vista devuelve una fila por cada contador de desempeño que está siendo utilizado dentro del servidor

--Total Executions: Indica la cantidad de procesos iniciados localmente o de forma remota
--Parallel Executions:  indica la cantidad de veces que un script incluye una especificación de ejecución en paralelo
--Streaming Executions:  indica la cantidad de veces que fue utilizado la función de flujo de datos  
--SQL CC Executions:  esta columna indica la cantidad de R Scripts que fueron iniciados remotamente y que se utilizó a sql server como un contexto de ejecución
--Implied Auth. Logins:  esta columna nos indica la cantidad de veces que se utilizó autenticación implícita
--Total Execution Time (ms):  esta columna indica el tiempo que duró la ejecución desde su llamada hasta la finalización de la ejecución como tal
--Execution Errors:  indica la cantidad de errores que se presentaron durante la ejecución del script.


SELECT * from sys.dm_os_performance_counters
WHERE object_name LIKE '%Scripts%'


-- DMV sys.dm_external_script_requests
-- This DMV reports a single row for each worker account that is currently
-- running an external script. Note that this worker account is different
-- from the credentials of the person sending the script. If a single Windows user
-- sends multiple script requests, only one worker account would be assigned to handle
-- all requests from that user. If a different Windows user logs in to run an external script
-- the request would be handled by a separate worker account.

-- OUTPUT
-- external_script_request_id: A GUID, which is also used as the temporary name of the working directory used to store scripts and intermediate results.
-- language: A value such as R that denotes the language of the external script.
-- degree_of_parallelism: An integer indicating the number of parallel processes that were used.
-- external_user_name: A Launchpad worker account, such as SQLRUser01.

SELECT external_script_request_id
 , [language]
 , degree_of_parallelism
 , external_user_name
FROM sys.dm_external_script_requests;

-- get info about running scripts

select r.session_id, r.blocking_session_id, r.status
    , db_name(s.database_id) as database_name, s.login_name
    , r.wait_time, r.wait_type, r.last_wait_type
    , r.total_elapsed_time, r.reads, r.logical_reads, r.writes
    , er.language as script_type, er.degree_of_parallelism, er.external_user_name
 from sys.dm_exec_requests as r
 join sys.dm_external_script_requests as er
   on r.external_script_request_id = er.external_script_request_id
 join sys.dm_exec_sessions as s
   on s.session_id = r.session_id

-- DMV sys.dm_external_script_execution_stats
-- Returns one row for each type of external script request.

-- language     -> Name of the registered external script language. Each external script must specify the language in the script request to start the associated launcher.
-- counter_name  -> Name of a registered external script function. Is not nullable.
-- counter_value -> Total number of instances that the registered external script function has been called on the server. This value is cumulative, beginning with the time that the feature was installed on the instance, and cannot be reset.

SELECT counter_name, counter_value   
FROM sys.dm_external_script_execution_stats   
WHERE language = 'R';



SQL Server 2016 Stretch Databases

El SQL Server Stretch Database permite que los datos históricos o de bitácoras puedan ser movidos hacia Azure, específicamente permite mover...