Evaluación Final TSQL

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 6

CIBERTEC

Dirección de Extensión Profesional


DIVISIÓN DE ALTA TECNOLOGÍA (DAT)

Programa : Transac-SQL – SQL Server 2019


Fecha : 02/09/2022
Docente : Mg. Adolfo Bernal Guio
Alumno : Flores Navarro, Edgar Nicolás

Evaluación Final

1. ¿Cuántas columnas puede tener un índice no agrupado?


En SQL Server, puede incluir hasta 1023 columnas por cada índice no
agrupado. Pero debe agregar un mínimo de una columna clave a su índice no
agrupado para poder crearlo.

2. ¿Cuándo se usa un índice con columnas incluidas y hasta cuantas columnas


soporta?
 Rediseñe índices no agrupados que tengan una clave de índice de gran
tamaño, de tal modo que solo las columnas utilizadas para búsquedas
sean columnas de clave. Convierta todas las demás columnas que abarcan
la consulta en columnas sin clave. De esta forma, tendrá todas las
columnas necesarias para abarcar la consulta pero la clave de índice en
sí será pequeña y eficaz.
 Incluya columnas sin clave en un índice no agrupado para evitar que se
superen las limitaciones actuales de tamaño del índice de un máximo de
32 columnas de clave y un tamaño máximo de clave de índice de 1700
bytes (16 columnas clave y 900 bytes antes de SQL Server 2016 (13.x)).
El Motor de base de datos no tiene en cuenta las columnas sin clave al
calcular el número de columnas de clave de índice o el tamaño de las
claves de índice.
 El orden de las columnas sin clave en la definición de índice no afecta
al rendimiento de las consultas que usan el índice.
 Evite índices no agrupados muy anchos en los que las columnas incluidas
no representen un subconjunto lo suficientemente estrecho de las
columnas de la tabla subyacente. Si agrega índices anchos, compruebe
siempre si el costo de actualizar un índice adicional ancho compensa el
costo de leer directamente desde la tabla.

3. Obtener la consulta en base al plan de ejecución del siguiente archivo:

select p.ProductID,
p.ProductName,
p.UnitsInStock
--od.OrderID
from Orders o
inner JOIN [Order Details] od ON od.OrderID =o.OrderID
inner JOIN Products p ON p.ProductID = od.ProductID

where datepart(year,o.orderdate)='1998'
group by p.ProductID,
p.ProductName,
p.UnitsInStock,
od.OrderID

4. Mejorar el costo de la siguiente consulta, (usar índices, cambio de consulta, etc) incluir
evidencias.
SELECT P.Name, SUM(SOD.OrderQty) ITEMS, SUM(SOD.UnitPriceDiscount) DESCUENTO
FROM SALES.SalesOrderDetail SOD
INNER JOIN Production.Product P
ON SOD.ProductID = P.ProductID
INNER JOIN Production.ProductSubcategory PSC
ON P.ProductSubcategoryID = PSC.ProductSubcategoryID
WHERE PSC.Name = 'Road Bikes'
GROUP BY P.Name

5. Proporcione 5 mejores prácticas para la construcción de una consulta.


a) Definir alias a las tablas en el SELECT con el fin de facilitarle al
motor la tarea de averiguar campo por campo a que tabla pertenece.
b) Si vas a llamar varias veces a una BD para efectuar consultas SQL
secuencialmente es preferible que crees un procedimiento almacenado.
c) No use SELECT *, coloque las columnas que requiere.
d) Siempre las tablas que tienen menos registros van al lado izquierdo en
el FROM y en el WHERE. Es fundamental el orden.
e) Evite el ORDER BY, es un paso adicional a veces innecesario que retarda
una consulta.

6. Explique que es un deadlock e indique que hace el motor de base de datos cuando
detecta uno.
Un Deadlock (también llamado "bloqueo mutuo", "abrazo mortal", "punto
muerto", etc.) sucede cuando dos o más transacciones intentan hacer
bloqueos de claves en orden opuesto, por ejemplo:

consulta 1: bloquear clave(1), bloquear clave(2);


consulta 2: bloquear clave(2), bloquear clave(1);

Si ambas consultas se ejecutaran al mismo tiempo, la consulta 1 bloqueará


la clave(1) y la consulta 2 bloqueará la clave(2) y cada consulta esperará
a que la otra libere la clave, ocurriendo el deadlock.

El primer síntoma que tendrá de un interbloqueo es el siguiente mensaje de


error que se mostrará en pantalla al usuario propietario del proceso que
fue seleccionado como víctima del interbloqueo.

Msg 1205, Nivel 13, Estado 51, Línea 6 Transacción (ID de proceso 62) se
bloqueó en los recursos de bloqueo con otro proceso y se ha elegido como
víctima de bloqueo. Vuelva a ejecutar la transacción.

El otro usuario cuyo proceso no fue seleccionado como víctima,


probablemente pasará desapercibido y además ignorará por completo que su
proceso participó en un interbloqueo.
7. Usar el script CreaciónTabla.sql para crear la tabla Alumnos luego proceder a
resolver el problema de bloqueos que se generara con los siguientes dos scripts
(sesión1.sql y sesión2.sql) la transacción debe quedar abierta para resolver la
consulta de la sesión 2.

Se debe pegar evidencia de la resolución del problema y explicar la razón del por qué
la solución implementada resolvió el problema.

Se insertó un BEGIN TRY Y BEGIN CATCH para poder actualizar y finalizar el


update y poder visualizar la tabla del query sesion2

BEGIN TRY
BEGIN TRANSACTION
UPDATE Alumno
SET nombre='Edgar',Apellido='Flores',carrera='Administración'
WHERE CodigoAlumno=1
COMMIT
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
ROLLBACK
END CATCH

Optimizar las siguientes dos consultas y evidenciar con el plan de ejecución y las
estadísticas de lecturas (SET STATISTICS IO ON) la mejora en la ejecución:

1) QUERY INICIAL
SELECT Carrera,osea
count(DNI) AS Alumnos_Por_Carrera
FROM Alumno
GROUP BY Carrera
EL COSTO ES DE 0.006s

2) MEJORA 1

(2 filas afectadas)
Tabla "Worktable". Número de examen 0, lecturas lógicas 0, lecturas
físicas 0, lecturas de servidor de páginas 0, lecturas anticipadas 0,
lecturas anticipadas de servidor de páginas 0, lecturas lógicas de
línea de negocio 0, lecturas físicas de línea de negocio 0, lecturas de
servidor de páginas de línea de negocio 0, lecturas anticipadas de
línea de negocio 0, lecturas anticipadas de servidor de páginas de
línea de negocio 0.
Tabla "Workfile". Número de examen 0, lecturas lógicas 0, lecturas
físicas 0, lecturas de servidor de páginas 0, lecturas anticipadas 0,
lecturas anticipadas de servidor de páginas 0, lecturas lógicas de
línea de negocio 0, lecturas físicas de línea de negocio 0, lecturas de
servidor de páginas de línea de negocio 0, lecturas anticipadas de
línea de negocio 0, lecturas anticipadas de servidor de páginas de
línea de negocio 0.
Tabla "Alumno". Número de examen 1, lecturas lógicas 100, lecturas
físicas 0, lecturas de servidor de páginas 0, lecturas anticipadas 0,
lecturas anticipadas de servidor de páginas 0, lecturas lógicas de
línea de negocio 0, lecturas físicas de línea de negocio 0, lecturas de
servidor de páginas de línea de negocio 0, lecturas anticipadas de
línea de negocio 0, lecturas anticipadas de servidor de páginas de
línea de negocio 0.

(1 fila afectada)

Hora de finalización: 2022-09-02T23:32:10.9100124-05:00


EL COSTO ES DE 0.004s

3) CREANDO INDEX A LA TABLA ALUMNO


CREATE INDEX INDX_ALUMNO_CARRERA ON ALUMNO (CARRERA)

4) QUERY MEJORADO

(2 filas afectadas)
Tabla "Alumno". Número de examen 1, lecturas lógicas 42, lecturas
físicas 0, lecturas de servidor de páginas 0, lecturas anticipadas 0,
lecturas anticipadas de servidor de páginas 0, lecturas lógicas de
línea de negocio 0, lecturas físicas de línea de negocio 0, lecturas de
servidor de páginas de línea de negocio 0, lecturas anticipadas de
línea de negocio 0, lecturas anticipadas de servidor de páginas de
línea de negocio 0.

(1 fila afectada)

Hora de finalización: 2022-09-02T23:35:09.5176413-05:00


EL COSTO ES DE 0.001s

DESPUES DE AREGAR EL INDEX A LA TABLA MEJORO EL COSTO

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy