martes, 28 de diciembre de 2021

Cambiar contraseña de usuario SQL Azure

El siguiente ejemplo cambia la contraseña de inicio de sesión UsuarioSQL una contraseña segura.

 ALTER LOGIN UsuarioSQL WITH PASSWORD = '<enterStrongPasswordHere>';


Cambiar la contraseña de un inicio de sesión al iniciar sesión como inicio de sesión

Si está intentando cambiar la contraseña del inicio de sesión con el que está conectado actualmente y no tiene el ALTER ANY LOGIN permiso, debe especificar la OLD_PASSWORD opción.

 ALTER LOGIN UsuarioSQL WITH PASSWORD = '<enterStrongPasswordHere>' OLD_PASSWORD = '<oldWeakPasswordHere>';

lunes, 27 de diciembre de 2021

SQL Server INSERTAR varias filas

 Para agregar varias filas a una tabla a la vez, utilice la siguiente forma de INSERTdeclaración:


INSERT INTO table_name (column_list)
VALUES
    (value_list_1),
    (value_list_2),
    ...
    (value_list_n);


En esta sintaxis, en lugar de utilizar una única lista de valores, utiliza varias listas de valores separados por comas para la inserción.

El número de filas que puede insertar a la vez es de 1000 filas utilizando esta forma de INSERTdeclaración. Si desea insertar más filas, debería considerar el uso de varias INSERTdeclaraciones BULK INSERT o una tabla derivada.

Tenga en cuenta que esta INSERTsintaxis de filas múltiples solo se admite en SQL Server 2008 o posterior.

jueves, 23 de diciembre de 2021

Uso de WITH (NOLOCK) SQL SERVER

 La sugerencia WITH (nolock) es un comando explícito dirigido a una tabla o vista específica que se usa para establecer el nivel de aislamiento de la transacción con respecto a la tabla o tablas dentro de una vista para una consulta. Una vez emitidos, los bloqueos no se utilizarán contra los datos dentro de la tabla. La ventaja de esto es que no hay posibilidad de que se produzca un punto muerto con cualquier otra consulta que se ejecute en la mesa. La otra ventaja indirecta es que se utilizará menos memoria para mantener bloqueos contra esos datos.

SELECT
first_name,
last_name,
FROM dbo.person p WITH (NOLOCK)
JOIN dbo.employee e WITH (NOLOCK)
ON e.person_id = p.person_id
WHERE p.person_id = 1;


La configuración de nolock anterior es explícita para la tabla contra la que se establece. Para establecer el valor globalmente para el alcance de la conexión, consulte ESTABLECER EL NIVEL DE AISLAMIENTO DE LA TRANSACCIÓN

Si bien la palabra clave "WITH" puede no ser necesaria en las versiones actuales de SQL Server, se recomienda encarecidamente su uso para la compatibilidad con versiones futuras.

Ventajas:

  • Los bloqueos mutuos no ocurrirán frente a otras consultas que se ejecutan contra los mismos datos
  • Se utiliza menos memoria debido a la falta de bloqueo de nivel de fila, página o rango
  • Por lo general, permite una simultaneidad mucho mayor debido a una menor huella

Desventajas:

  • Los datos no comprometidos se pueden leer dando lugar a lecturas sucias
  • Las sugerencias explícitas contra una tabla son generalmente una mala práctica

Uso

En la mayoría de los lugares en los que he trabajado, con (nolock) ha sido una práctica generalmente aceptada en las áreas específicas del sistema que no son sensibles a la falta de sincronización de los datos. Sin embargo, es importante saber dónde pueden salir mal las cosas. La señal de alerta más grande que se me ocurre para no usar NOLOCK sería un sistema que usa transacciones explícitas (BEGIN TRAN ..END TRAN) o un uso intensivo de activadores. Varias declaraciones ejecutadas dentro de una transacción experimentan un retraso de tiempo en sus operaciones INSERT / UPDATE / DELETE, sin embargo, los cambios se confirman de una vez en COMMIT. Las declaraciones que consultan los datos modificados utilizando el nivel de aislamiento READ COMMITTED no podrán ver estos cambios hasta que se confirmen, mientras que READ UNCOMMITTED (NOLOCK) verá los cambios inmediatamente independientemente de cuándo se produzca la confirmación.

No use WITH (NOLOCK) sin comprender completamente las ramificaciones de una lectura sucia

Crear sp_who3 para mejor búsqueda de bloqueos, un mejor sp_who3

 El siguiente sp salio del blog 

https://sqlserverplanet.com/dba/a-better-sp_who2-using-dmvs-sp_who3

El siguiente código genera la misma información que se encuentra en sp_who2, junto con información adicional de solución de problemas. También contiene la instrucción SQL que se está ejecutando, por lo que en lugar de tener que ejecutar un DBCC INPUTBUFFER por separado, la instrucción que se está ejecutando se muestra en los resultados.

A diferencia de sp_who2, este sp_who3 personalizado solo muestra las sesiones que tienen una solicitud en ejecución actual.

Lo que también se muestra son las lecturas y escrituras del comando actual, junto con el número de lecturas y escrituras de todo el SPID. También muestra el protocolo que se está utilizando (TCP, NamedPipes o Shared Memory).

El bloqueador de clientes potenciales a continuación se mostrará en la columna BlkBy como -1.


create PROCEDURE [dbo].[Sp_who3]
AS
BEGIN
SET TRANSACTION isolation level READ uncommitted

SELECT SPID = er.session_id,
--,BlkBy = CASE WHEN lead_blocker = 1 THEN -1 ELSE er.blocking_session_id END,
ElapsedMS = er.total_elapsed_time,
CPU = er.cpu_time,
IOReads = er.logical_reads + er.reads,
IOWrites = er.writes,
Executions = ec.execution_count,
CommandType = er.command,
LastWaitType = er.last_wait_type,
ObjectName = Object_schema_name(qt.objectid, dbid+ '.'
+ Object_name(qt.objectid, qt.dbid),
SQLStatement = Substring (qt.text, er.statement_start_offset / 2, (
CASE
WHEN
er.statement_end_offset = -1 THEN
Len
(
CONVERT(NVARCHAR(max), qt.text)) *
2
ELSE
er.statement_end_offset
END -
er.statement_start_offset ) / 2),
STATUS = ses.status,
[Login] = ses.login_name,
Host = ses.host_name,
DBName = Db_name(er.database_id),
StartTime = er.start_time,
Protocol = con.net_transport,
transaction_isolation = CASE ses.transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'Read Uncommitted'
WHEN 2 THEN 'Read Committed'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot'
END,
ConnectionWrites = con.num_writes,
ConnectionReads = con.num_reads,
ClientAddress = con.client_net_address,
Authentication = con.auth_scheme,
DatetimeSnapshot = Getdate(),
plan_handle = er.plan_handle
FROM sys.dm_exec_requests er
LEFT JOIN sys.dm_exec_sessions ses
ON ses.session_id = er.session_id
LEFT JOIN sys.dm_exec_connections con
ON con.session_id = ses.session_id
OUTER apply sys.Dm_exec_sql_text(er.sql_handle) AS qt
OUTER APPLY
(
SELECT execution_count = MAX(cp.usecounts)
FROM sys.dm_exec_cached_plans cp
WHERE cp.plan_handle = er.plan_handle
) ec
/*OUTER APPLY
(
SELECT
lead_blocker = 1
FROM master.dbo.sysprocesses sp
WHERE sp.spid IN (SELECT blocked FROM master.dbo.sysprocesses)
AND sp.blocked = 0
AND sp.spid = er.session_id
) lb*/
WHERE er.sql_handle IS NOT NULL
AND er.session_id != @@SPID
ORDER BY
--CASE WHEN lead_blocker = 1 THEN -1 * 1000 ELSE -er.blocking_session_id END,
er.blocking_session_id DESC,
er.logical_reads + er.reads DESC,
er.session_id
END


Se ejecuta:

SP_WHO3



Uso de sp_who2 SQL Azure

 sp_who2 SQL Azure

Una de las primeras líneas de defensa para determinar las causas de la ralentización de la base de datos es utilizar sp_who2. sp_who2 muestra todas las sesiones que están establecidas actualmente en la base de datos. Estos se indican como SPID o Id. De proceso del servidor. Ejecutar sp_who2 es fácil, todo lo que se requiere es escribir sp_who2 y ejecutarlo, sin embargo es una buena idea llamarlo con EXEC.

EXEC sp_who2

Los primeros 50 resultados son SPID del sistema Generalmente, estos no afectan la ralentización del sistema. Estos eventos del sistema incluyen el escritor de Checkpoint, los escritores de registros y los programadores de tareas. Los procesos de usuario son números SPID 50 y superiores. Al diagnosticar ralentizaciones, son estos SPID los que acaparan los recursos potenciales.

sp_who2 también toma un parámetro opcional de un SPID. Si se pasa un spid, los resultados de sp_who2 solo muestran la fila o filas del SPID en ejecución.

Hay cuatro cosas principales a tener en cuenta al diagnosticar ralentizaciones.

  1. Bloqueo
  2. Alto uso de CPU
  3. Uso elevado de IO
  4. Varias entradas para el mismo SPID que representan el paralelismo.


Ver el número de línea en el SQL Server Management Studio

 Por default viene sin esta configuración y se ve de esta manera:








Para configurar nos vamos a tolos/ Options












Marcamos el check Line numbers y le damos OK











Y Listo…



 

 


 

SP_WHO2 Tunning BD Monitoreo

 Con sp_who2 se puede saber que procesos estan corriendo en el momento  










Con la siguiente consulta se puede ver cual es la sentencia que se esta ejecutando en base al SPID:

declare
    @spid int
,   @stmt_start int
,   @stmt_end int
,   @sql_handle binary(20)

set @spid = XXX -- LLENAR SPID

select  top 1
    @sql_handle = sql_handle
,   @stmt_start = case stmt_start when 0 then 0 else stmt_start / 2 end
,   @stmt_end = case stmt_end when -1 then -1 else stmt_end / 2 end
from    sys.sysprocesses
where   spid = @spid
order by ecid

SELECT
    SUBSTRING(  text,
            COALESCE(NULLIF(@stmt_start, 0), 1),
            CASE @stmt_end
                WHEN -1
                    THEN DATALENGTH(text)
                ELSE
                    (@stmt_end - @stmt_start)
                END
        )
FROM ::fn_get_sql(@sql_handle)

Obtendrá como resultado el SP o fracción de consulta que se esta ejecutando.