SQL Server en Linux
Curso Gestionando Azure SQL Database
Puedes revisar el Curso Gestionando Azure SQL Database desde aquí:
Test Cursor vs While en SQL Server
Para el siguiente test entre un cursor vs while loop utilizaremos una tabla con la siguiente estructura:
CREATE TABLE AprendeDB
(
ID int IDENTITY(1,1) PRIMARY KEY CLUSTERED,
Name nvarchar(50)
)
Aplicaremos el siguiente fix data ejecutándolo para obtener 1000 registros
DECLARE @max int=1000, @count int=1
WHILE @max>=@count
BEGIN
BEGIN TRAN
INSERT INTO AprendeDB VALUES(‘www.aprendedb.com’)
COMMIT
SET @count=@count+1
END
Definición del Cursor:
SET NOCOUNT ON
DECLARE my_cursor CURSOR FOR SELECT ID,Name FROM AprendeDB
DECLARE @id INT
DECLARE @name NVARCHAR(50)
OPEN my_cursor
FETCH NEXT FROM my_cursor INTO @id,@name
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT (CAST(@id AS VARCHAR(5)) + ‘.)’ + @name)
FETCH NEXT FROM my_cursor
END
CLOSE my_cursor
DEALLOCATE my_cursor
Definición del While:
DECLARE @Rows INT, @id1 INT
DECLARE @name1 NVARCHAR(50)
SET @Rows = 1
SET @id1 = 0
WHILE @Rows > 0
BEGIN
SELECT TOP 1 @id1 = ID, @name1 = Name FROM AprendeDB WHERE ID >= @id1
SET @Rows = @@ROWCOUNT
PRINT (CAST(@id1 AS VARCHAR(5)) + ‘.)’ + @name1)
SET @id1 += 1
END
Utilizaremos SQL Server Profiler para medir las estadísticas utilizadas en cada una de las ejecuciones:
Estadísticas del cursor:
Duration: 70892 CPU: 46 Reads: 4113
Estadísticas de While:
Duration: 387 CPU: 16 Reads: 2054
Conclusión:
Se logra evidenciar que utilizando un constructor While se obtiene mayor rendimiento a nivel de tiempo y menor número de lecturas que un cursor para este escenario.
Visita http://www.aprendedb.com
In Memory OLTP SQL Server en Ubuntu
Protegiendo nuestros datos en las Organizaciones con SQL Server 2016
Nuestras organizaciones poseen como uno de los principales activos “la información” que se encuentra alojada en sus almacenes de datos, es de vital importancia que las herramientas que utilizamos para poder alojarlos nos brinden la mayor seguridad de manera sencilla.
Microsoft SQL Server 2016 reafirma su mejora continua en ofrecer a nuestras organizaciones soluciones para poder proteger nuestros datos tanto dentro y fuera de nuestras organizaciones, para ello ha implementado nuevas características de seguridad, entre ellas: Transparent Data Encryption, Dynamic Data Masking, Row Level Security y Always Encrypted.
Always Encrypted es una característica que nos permite proteger datos de manera confidencial, como números de tarjetas de créditos, seguro social, identificadores personales, etc; independizando aquellos que poseen los datos (y pueden verlos) de aquellos que lo administran, pero no deberían tener acceso a este tipo de información sensible.
En Always Encrypted el trabajo de cifrado/descrifrado se realiza en la aplicación cliente a nivel del driver de ADO.Net activando la propiedad Column Encription Setting en la cadena de conexión, esta funcionalidad se encuentra tanto en el Servicio de Database Engine de SQL Server 2016 y en Azure SQL Database, logrando implementar no solo la encriptación de nuestra información almacenada, sino que a su vez encripta los datos al viajar por la red.
Descubre mucho más sobre el nuevo SQL Server 2016 revisando los siguientes enlaces:
• Evalúa SQL Server 2016
• Documentación Técnica de SQL Server 2016
• Introducción a SQL Server 2016 (eBook)
Publicado en: TechNet-Flash-Julio-2016
Instalación SQL Server 2017 CTP 2.0 en Ubuntu Server
En este videoblog muestro como podemos instalar SQL Server 2017 CTP 2.0 en Ubuntu Server, a continuación la secuencia de comandos para la instalación:
Importar las claves GPG públicas
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add –
Registrar el repositorio de Ubuntu de Microsoft SQL Server
curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server.list | sudo tee /etc/apt/sources.list.d/mssql-server.list
Ejecute los siguientes comandos para instalar SQL Server:
sudo apt-get update
sudo apt-get install -y mssql-server
Configuración inicial de SQL Server
sudo /opt/mssql/bin/mssql-conf setup
Una vez realizada la configuración, compruebe que el servicio se está ejecutando:
systemctl status mssql-server
Referencia: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-ubuntu
Monitoreando la Desfragmentación de Indices en MS SQL Server
Como parte de nuestras actividades dentro de la administración de una Base de Datos en MS SQL Server, debemos implementar índices en nuestras Tablas a fin de mejorar el rendimiento de nuestros procesos ya sean Select’s, Exec’s, etc; pero que ocurre luego de que hemos implementado estos objetos, pues debemos tener un control y monitoreo de la desfragmentación que poseen (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 https://msdn.microsoft.com/es-es/library/ms189858.aspx ).
Por lo tanto más alla de poder implementar un mantenimiento de indices de forma semanal, debemos monitorear de manera constante a fin de ver si este periodo de mantenimiento es suficiente o debe realizarse de manera más continua, y sobre todo a qué índices debemos aplicar las tareas ya sean de Rebuild o Reorganize (ello lo analizaremos en un siguiente post). Entonces para ello podemos combinar nuestras DMV’s y a través del siguiente query podemos ver a detalle el nivel de DESFRAGMENTACION que poseen nuestros índices y evaluar las tareas específicas a realizar.
Aquí el query:
SELECT DB_NAME(database_id) AS DatabaseName, database_id,
OBJECT_NAME(ips.object_id) AS TableName, ips.object_id,
i.name AS IndexName, i.index_id, p.rows,
ips.partition_number, index_type_desc, alloc_unit_type_desc, index_depth, index_level,
avg_fragmentation_in_percent, fragment_count, avg_fragment_size_in_pages, page_count,
avg_page_space_used_in_percent, record_count, ghost_record_count, version_ghost_record_count, min_record_size_in_bytes,
max_record_size_in_bytes, avg_record_size_in_bytes, forwarded_record_count,GETDATE()DateCreated
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, ‘LIMITED’) ips
INNER JOIN sys.indexes i ON i.object_id = ips.object_id AND i.index_id = ips.index_id
INNER JOIN sys.partitions p ON p.object_id = i.object_id AND p.index_id = i.index_id
WHERE avg_fragmentation_in_percent > 10.0 AND ips.index_id > 0 AND page_count > 1000
Tener en cuenta que esta consulta es por BD y aplica a todas nuestros índices que se encuentran en todas nuestras tablas.
Si tienes una consulta deja tu comentario en el post y visítanos en http://www.aprendedb.com.
Hasta el siguiente post!
Inventario de Tablas por registro y tamaño en Kb
Hola como les va, aquí les dejo un pequeño query que les permitirá ver la cantidad de registros de cada tabla de su Base de Datos su tamaño en Kb y algunos datos adicionales que les será de mucha ayuda:
SET NOCOUNT ON
DECLARE @sizes TABLE
(
[name] NVARCHAR(128),
[rows] CHAR(11),
reserved VARCHAR(18),
data VARCHAR(18),
index_size VARCHAR(18),
unused VARCHAR(18)
)
INSERT @sizes EXEC sp_msForEachTable ‘EXEC sp_spaceused »?»’
SELECT *
FROM @sizes
ORDER BY [rows] DESC
No olviden de visitar http://www.aprendedb.com
Saludos!
Nuevo Editor de Querys en Microsoft Azure https://t.co/7Gbf9T5R7Z