Sie sind auf Seite 1von 20

AA10-EV2-MANEJO DE TRANSACCIONES,

BLOQUEOS Y CONTROL DE CONCURRENCIA


EJECUTANDO LA PRÁCTICA PROPUESTA.

PRESENTADO POR:
LAUREANO BLANQUICETT SANJUANELO

SERVICIO NACIONAL DE APRENDIZAJE SENA

PROGRAMA DE FORMACIÓN
ESPECIALIZACIÓN TECNOLÓGICA EN
GESTIÓN Y SEGURIDAD DE BASES DE DATOS
INTRODUCCIÓN

La Evaluación de una Base de Datos BD, es una de las tareas más importantes de un
Administrador de Base de Datos. Este profesional es el encargado de analizar
constantemente el funcionamiento del Sistema manejador de Bases de Datos SMBD,
para optimizar el uso de los recursos, como CPU, Memoria, Disco y Red, para ver su
desempeño. El análisis constante de un Sistema Manejador de Bases de Datos SMBD,
permite ver su desempeño en todo momento. Si se detecta que las transacciones no
son respondidas con la rapidez que se necesita o se pierden datos, el Administrador
de la Base de Datos, debe aplicar las medidas correctivas para solucionar las fallas,
analizando su comportamiento a través de herramientas gráficas provistas por el
fabricante de la aplicación.
En este laboratorio se realizaran actividades en las que se aborda situaciones
problemáticas que le ayudaran al administrador de bases de datos SQL Server a
desarrollar habilidades que le permitan realizar un control adecuado sobre la
concurrencia y bloqueos en la base de datos. Los DBA tienen la responsabilidad de
mantener disponibles los servicios que presta la base de datos, para ello deben
controlar el comportamiento de los procesos que acceden de forma concurrente sobre
datos compartidos y los bloqueos que estos generan sobre los mismos.
(SENAINTRO.BLACKBOARD.COM, 2017)

OBJETIVO

Una vez conocido el detalle de los procedimientos y acciones a través de los cuales el
motor de base de datos seleccionado gestiona transacciones, controla bloqueos y
concurrencia (Actividad AA10-3), debe participar en el foro temático “Socialización y
evaluación del modelo transaccional en un motor de Bases de Datos específico”,
aportando una conclusión con respecto a la manera como se manejan transacciones,
bloqueos y concurrencia en el SMBD de su elección. Así la información estará
dispuesta en la plataforma para recibir la retroalimentación de sus compañeros y
además debe dar su opinión sobre el trabajo de dos o más participantes del proceso.
2.1 Objetivos especificos

 Reconocer las herramientas que son útiles para la supervisión


 de transacciones y bloqueos en el SMBD SQL Server.
 Utilizar las herramientas de supervisión para monitorear el comportamiento
 de las transacciones y bloqueos en el SMBD SQL Server.
 Administrar los recursos utilizados por las transacciones y bloqueos
para mantener disponible los servicios de la base de datos SQL.
Desarrollar puntos laboratorio 10
2. Abrir una consulta nueva en SQL Server 2008 R2 y escribir el siguiente comando
COMMIT TRANSACTION y verificar de nuevo la cantidad de transacciones activas y
determinar que hace este comando en la base de datos SecSalud.
El resultado es:
Auto-attach to process '[2736] [SQL] localhost' on machine 'localhost' succeeded.
The thread 'localhost [54]' (0x1610) has exited with code 0 (0x0).
The program '[2736] [SQL] localhost: localhost' has exited with code 0 (0x0).
Este comando por sí solo no hace nada, debe ser acompañado de otras cláusulas, dado
que este comando se utiliza para Finalizar la transacción si no se han encontrado
errores.
3. Que sucede al hacer una consulta de todos los datos de la tabla EPS si anteriormente
se ejecuta el siguiente comando:
BEGIN TRANSACTION INSERT
INTO EPS (ideps, nombre, estadoeps)
VALUES (15,’confisena’,1) '
Para la cancelación de la transacción anterior ¿qué comando se debe utilizar?.
Sale un error: Cannot insert explicit value for identity column in table 'EPS' when
IDENTITY_INSERT is set to OFF.
Esto ocurre porque sql server no permite insertar datos a llaves primarias de forma
normal:
hay utilizar el comando, para que deje insertar datos de forma de inserción explicita en
la tabla a una pk: el comando a utilizar es: SET IDENTITY_INSERT EPS
Ejemplo:
BEGIN TRANSACTION
SET IDENTITY_INSERT EPS ON
INSERT INTO EPS (ideps, nombre, estadoeps)
VALUES (15,'confisena',1)
4. Que le falta a la siguiente transacción para que se efectúen los cambios en la base de
datos Secretaria de Salud.
BEGIN TRANSACTION
INSERT INTO persona (idPersona, tipoidentificacion, nombre, apellido, fechaNacimiento,
sexo)
VALUES (1112548, 1, 'Pedro', 'Garcia', 1982-01-27, 'M');
INSERT INTO EPS (nombre, estadoeps)
VALUES ('confinacional',4);
Lo que hay que hacer es agregar el comando: SET IDENTITY_INSERT [tabla] ON,
para que esta transacción pueda correr y arreglar campos tabla persona:
tipoidentifiacion, idPersona; quedaría:
BEGIN TRANSACTION
SET IDENTITY_INSERT EPS ON
INSERT INTO Persona (idPersona, tipoidentificacion, nombre, apellido, fechaNacimiento,
sexo)
VALUES (111245548, 1, 'Pedro', 'Garcia', 1982-01-27, 'M')
INSERT INTO EPS (ideps, nombre, estadoeps)
VALUES (16,'confiacional',4)
5. En el siguiente cuadro especificar para cada tipo de transacción si es implícita, explicita
o automática.

Transacciones explícitas
Por el contrario, las Transacciones explícitas son las que se define en el código T-
SQL. Hay que indicar cuando se inician (BEGIN TRANSACTION) y cuando finalizan
(COMMIT TRANSACTION), y pueden albergar un conjunto de instrucciones dentro
de la misma transacción.
Cuando se produce el COMMIT, se hacen efectivos los cambios en los ficheros de datos
(.mdf y .ndf). Mientras no se realiza el COMMIT las sentencias de los cambios se guardan
en el log de transacciones (.log), que gracias a este es posible revertir los cambios si
fuese necesario..
Automática
Es el modo de administración de transacciones predeterminado de SQL Server Database
Engine (Motor de base de datos de SQL Server). Cada instrucción Transact-SQL se
confirma o se revierte cuando finaliza. Si una instrucción termina correctamente, se
confirma; si encuentra un error, se revierte. Una conexión a una instancia de Motor de
base de datos funciona en modo de confirmación automática siempre que no se suplante
el modo predeterminado mediante transacciones explícitas o implícitas.
1. Abra una nueva consulta. Use la base de datos Secretaria de Salud En una nueva
consulta ejecute sp_lock y revise los resultados.
Se verifican las consultas definidas en el laboratorio para comenzar la parte de trabajo
con bloqueos de transacciones:
4.3. Bloqueos.
Use la base de datos
Secretaria de Salud En
una nueva consulta
ejecute sp_lock y revise los
resultados. Abra informe
de transacciones de
bloqueo para verificar que
no hay ningún bloqueo
activo. Clic derecho en su
bd -> informe -> informe
estándar -> Todas las
transacciones de bloqueo.
CONCURRENCIA, TRANSACCIONES, ACCESOS Y BLOQUEOS. MANEJO DE
JMETER.
1 Tipos de Concurrencia de Transacciones
 Optimista: Deja realizar modificaciones de los datos y se persisten (commitado).
Cuando se van a persistir se verifica que no se han modificado por otras
transacciones simultáneamente; en cuyo caso produce un error.
 Pesimista: Para los datos modificados, realizar un bloqueo de los mismos.
Impendiendo que otras transacciones realicen cambios de esos datos.
2 Tipos de Nivel de Aislamiento de Transacción
 READ UNCOMMITTED: Leen valores modificados por otras transacciones no
persistidos (commitados).
 READ COMMITTED: No dejan leer valores modificados por otras transacciones no
persistidos (commitados). READ COMMITTED al releer datos que se han comitado
por otra transacción durante la ejecución de la propia; obtiene valores diferentes.
 READ_COMMITTED_SNAPSHOT: Evita el problema del READ COMMITED. Crea un
estado en la base de datos; de esta manera la transacción lee los datos referidos a
ese estado. No impide que otras transacciones modifiquen los datos leídos por la
nuestra.
 REPEATABLE READ: Evita el problema del READ COMMITED. REPEATABLE READ
evita que otra transacción modifique los datos modificados por nuestra transacción.
Dado que los datos leídos; pueden depender de lo realizado en la otra transacción.
 SERIALIZABLE: REPEATABLE READ que además se extiende para inserciones.
3 TRANSACCIONES EN SQL SERVER
En SQL Server el tipo de concurrencia es pesimista. El bloqueo se activa al modificar
los datos; no al leerlos. Si queremos activarlo en su lectura con debemos usar la
cláusula WITH UPDLOCK.
SELECT * FROM TABLE WITH (UDPLOCK) WHERE ID = 1
El nivel del Aislamiento en SQL SERVER se indica con la instrucción SET
TRANSACTION ISOLATION LEVEL. Por defecto es READ COMMITTED.
En SQL SERVER cuando indicamos READ COMMITTED, puede ser READ
COMMITTED o READ COMMITED SNAPSHOT. Esto se determina en función de la
configuración de la base de datos:
 READ COMMITED SNAPSHOT: La base de datos se encuentra con la configuración
SET READ_COMMITTED_SNAPSHOT ON.
 READ COMMITTED: La base de datos se encuentra con la configuración SET
READ_COMMITTED_SNAPSHOT OFF
En SQL AZURE solo existe READ COMMITTED SNAPSHOT. No se puede desactivar
con la configuración SET READ_COMMITTED_SNAPSHOT OFF.
4 TRANSACCIONES EN OTROS ENTORNOS
En Entity Framework, LINQ, DataSet,… el tipo de concurrencia es optimista.
En Hibernate, por defecto tiene concurrencia optimista. Pero se puede habilitar
concurrencia pesimista.
En general, se recomienda el uso del TransactionScope, para determinar el nivel de
aislamiento con TransactionScopeOption.
Rendimiento con JMeter
Se ha permitido desarrollar una herramienta de análisis de resultados similar a la que
proporcionan las herramientas comerciales. Las principales ventajas que aporta son:
 Permite generar un informe de pruebas de resultados de manera automática sin
necesidad de tratar los datos en hojas de cálculo.
 Permite estudiar de manera gráfica la relación de los diferentes indicadores de las
pruebas, generando automáticamente gráficas de rendimiento.
 Facilita la Identificación de los posibles puntos de saturación para detectar "cuellos
de botella".
 Desenmascara los posibles errores de la aplicación por la aplicación de concurrencia.
 Permite recuperar de manera íntegra los resultados de pruebas anteriores, o
almacenarlos en un histórico para posibles comparaciones de resultados.
El objetivo final es dotar al ingeniero de pruebas de una herramienta que aumente su
productividad, y también la capacidad de análisis para dotar de mayor calidad las
pruebas de rendimiento.
Manejo de transacciones y control de concurrencia, JMeter - Práctica.
Para este laboratorio, se Utilizaron parámetros de configuración en el base de datos, los
cuales por motivo de facilidad y configuración de mi equipo pueden diferir de los
recomendados por el Tutor, por ello los detallo.
Nombre Servidor: localhost
Nombre de variable sql server: pc-PC
Usuario conexión base datos: pc-PC
Password: 123
Puerto conexion: 1433
base de datos: Sec_salud
Anexo la pantalla de
conexión de sql server,
donde se detalla que no
conecto con autenticación
de Sql server si no de
Windows y utilizo el localhost
de la máquina.
En las configuraciones de
seguridad como les he
definido, el usuario de
conexión es pc-PC

Primero se define el grupo


de hilos a trabajar o usuarios
a concurrir:

Se define la conexion con el controlador jdb, quien permitira acceder al Sql server:
Luego se define la conexión jdbc:

URL BD: jdbc:pc-PC://localhost:1433;databaseName=Sec_salud


DRIVER JDBC: com.microsoft.sqlserver.jdbc.SQLServerDriver
USUARIO: pc-PC
A continuación se definen las peticiones a la base de datos,
Luego se anexa el componente gráfico:
Aquí una vez dato el Play
en ejecutar, vemos como el
grafico comienza a tener
cambios y ver los resultados
de las transacciones o
consultas de forma graficas
definida en los hilos de
conexión.

Anexo reporte resumen, un reporte


más numérico que permite verificar
varianza de datos y concurrencia.
Otra grafica tipo
spline que
permite ver en
una secuencia
más lineal, la
concurrencia de
las transacciones
medidas por el
Jmeter

Anexo el
monitor de
rendimiento de
Sql server en
función, dentro
del menú
performance
tool,
programas del
Pack de
instalación de
Sql server,
server profile
TRANSACCIONES Y BLOQUEOS
Preguntas formuladas
El presente laboratorio está compuesto por una serie de preguntas que permitirán abordar los
principales aspectos que deben ser tenidos en cuenta para gestionar transacciones, controlar
bloqueos, y concurrencia.
¿Cómo es el manejo transaccional en una base de datos dependiendo del motor utilizado?
Una transacción es un evento secuencial de cambios a una base de datos las transacciones se
emplean como mecanismos de petición, los ejemplos más básicos de transacciones son
inserción, borrado y actualización de una base de datos, puede generarse transacciones más
complejas que contengan una serie de pasos.
Es importante conocer las propiedades de una transacción; las transacciones deben poseer las
siguientes características para ser exitosas e integrales:
 Atomicidad: Todas las transacciones dentro de la sentencia deben ejecutarse sin errores si
por algún motivo no se cumple, la transacción aborta en el punto de ruptura y deshace todos
los cambios
 Consistencia: Se debe asegurar que todos los cambios en la base de datos sean correctos y
estén guardados.
 Aislamiento: Dos transacciones no pueden estar visualizando información al mismo
tiempo.
 Durabilidad: La transacción debe asegurar que los cambios realizados perdurarán aunque
el sistema falle.
Para dirigir el flujo y mantener sus propiedades existen las siguientes sentencias en
SQL:
 Commit: Guarda los cambios realizados
 Rollback: Deshace los cambios realizados
 Savepoint: Crea un punto de restauración dentro de un conjunto de transacciones para
luego deshacer los cambios si es necesario
Manejo de transacciones: EL manejo transaccional inicia tras ingresar a la base de datos en este
caso seleccionaremos la tabla SecSalud (Secretaria de salud), daremos clic derecho sobre esta tabla
y clic en mostrar las primeras filas para evidenciar que tengamos información.
Como podemos apreciar la información contenida en la tabla es la siguiente.

Ahora procederemos a elaborar dos (2) transacciones diferentes insertando, actualizando o


eliminando registro de esta base de datos, todas estas transacciones deben quedar abiertas.

Ahora procederemos a iniciar la transacción.


Como podemos ver los comandos se han ejecutado correctamente. A continuación el código
empleado.
BEGIN TRANSACTION
INSERT INTO EstadoEPS (descripcion) VALUES ('Sin registro')
Como podemos ver los comandos se han ejecutado correctamente. A continuación el código
empleado.
BEGIN TRANSACTION
UPDATE EstadoEPS SET descripcion='Arbitrada' WHERE descripcion='Intervenida'
El comando COMMIT TRANSACTION le confirma al Sistema Manejador de Bases de Datos
SMBD que las modificaciones ejecutadas anteriormente deben ser permanentes en la base de
datos, es decir es el comando que autoriza la ejecución de una sentencia SQL o proceso de forma
que sea permanente lo que se desea realizar, bien sea para crear, consultar, guardar, modificar
o eliminar en la base de datos o parte de ella.
Al volver a consultar las sentencias anteriores tuvieron efecto es decir fueron efectuadas de
forma permanente de tal forma que se realizó un nuevo registro en la tabla con descripción “Sin
registro” y se actualizo el registro con descripción “Intervenida” por “Arbitrada”.

Que sucede al hacer una consulta de todos los datos de la tabla EPS si anteriormente se ejecuta
el comando?
BEGIN TRANSACTION
INSERT INTO EPS (ideps, nombre, estadoeps)
VALUES (15,'confisena',1)
Al realizar una consulta en
la tabla EPS despues de
ejecutar la sentencia, se
notan los mismos datos que
tenia anteriormente,
concluyendo que no se
realizo el registro
propuesto en la sentencia
ya que se genero un error
con el mensaje de
“consulta completada con
errores” A continuación la
evidencia.

Al ser una clave primaria y estar identificada como única en la tabla y auto incrementable, es
decir que el SMBD lo aumenta en uno este campo, en las inserciones no hay necesidad de
nombrar y enviar un valor en este campo ya que el SMBD se encarga de eso por ello es que
internamente se apaga o se coloca en estado OFF la propiedad IDENTITY_INSERT ya que si
fuere ON su estado es porque permite la inserción, ya que no es auto incrementable el campo
sin importar si es o no una clave primaria.
Para cancelar la transacción hay que ejecutar la sentencia: ROLLBACK TRANSACTION

2 ¿Cómo se genera un bloqueo?


Bloqueos.
Abra una nueva consulta. Use la base de datos Secretaria de Salud En una nueva consulta
ejecute sp_lock y revise los resultados.
Abra informe de transaccio nes de
bloqueo para verificar que no hay
ningún bloqueo activo. Clic
derecho en su bd -> informe ->
informe estándar -> Todas las
transacciones de bloqueo.
Al realizar la anterior
práctica se consultaron
los bloqueos que
presenta el sistema y en
ambos métodos
encontramos el mismo
resultado. Actualmente
no hay transacciones de
bloqueo para la base de
datos (SecSalud).
En conclusión un
bloqueo es generado tras
requerir lectura o
modificación de datos
modificados por otros usuarios y esta es la razón principal de la pregunta generada en este
apartado.
3 ¿ Cómo se libera un bloqueo?
Para anular bloqueos de una base de datos SQL podemos seguir los pasos a continuación
descritos:
1. Abrir la consola de SQL Server. Ésta
se encuentra en el menú "Inicio" de
Windows, bajo el menú "SQL Server".
Clic en "SQL Server Management
Studio" para abrir la consola.
2. Escribir "sp_who 'active' " en el
espacio de trabajo y presiona la tecla
"Entrar". Esto muestra todos los
procesos, nombres de usuario y sesiones
de ID asociadas a ellos. Identificar cuál
ID está provocando el bloqueo.
3. Identificar la ID de sesión para el
registro bloqueado. Desde la lista que
apareció en el Paso 2, encontrar el
usuario que tiene el bloqueo de registro y
apuntar la ID de sesión. Esta ID se requiere para los siguientes pasos.
4. Escribir "Kill <ID de sesión>" en la consola. Esto removerá el bloqueo de registro en la fila
de la tabla. Una vez que el bloqueo haya sido removido, abrir la tabla para comprobar que
el bloqueo fue eliminado de forma exitosa.
5. Detener y reiniciar la aplicación que experimentó el problema al consultar la tabla. Este
paso es requerido si el bloqueo de registro estaba provocando problemas con una aplicación
de escritorio. Esto además ayuda a restablecer cualquier aplicación que haya estado
causando errores cuanto intentábamos consultar el registro bloqueado.
O bien sea solucionar el bloqueo a través de una reversión con ROLLBACK TRANSACTION,
para que la sentencias guarden los cambios de forma permanente se coloca al final de la sentencia
un COMMIT TRANSACTION
4 ¿ De qué forma se hace seguimiento a las transacciones en un determinado momento?
El método más sencillo es el empleo de la herramienta que trae por defecto SQL en el cual a través
de una serie de informes que se presentan a continuación puede realizarse el seguimiento en un
momento determinado
Abra informe de
transacciones de
bloqueo para
verificar que no
hay ningún
bloqueo activo.
Clic derecho en
su bd -> informe
-> informe
estándar ->
Todas las
transacciones de
bloqueo.

Al realizar la anterior
práctica se consultaron
los bloqueos que
presenta el sistema y en
ambos métodos
encontramos el mismo
resultado. Actualmente
no hay transacciones de
bloqueo para la base de
datos (SecSalud).

Igualmente podemos realizar múltiples informes para hacer seguimiento a las transacciones,
entre los cuales encontramos:
Bibliografia

 Senaintro.blackboard.com. (2017). Citar un sitio web - Cite This For Me. [online]
Disponible en:
https://senaintro.blackboard.com/webapps/blackboard/content/listContent.jsp?
course_id=_1860232_1&content_id=_93567484_1 [Accesado 15 Oct.
2017].https://docs.microsoft.com/es-es/sql/relational-databases/indexes/reorganize-
and-rebuild-indexes
 Angelfire.com. (2017). Glosario de Base de Datos. [online] Disponible en:
http://www.angelfire.com/ultra2/pecanpie/Bimestral/Glosario.htm [Accesado 15 Oct.
 2017].
 iscgarcia, M. (2017). Apuntes de Administración de Bases de Datos -
Monografias.com. [online] Monografias.com. Disponible en:
http://www.monografias.com/trabajos19/administracion-base-datos/administracion-
base-datos.shtml [Accesado 15 Oct. 2017].
 Co.video.search.yahoo.com. (2017). Cuando Usar Un Deadlock - Yahoo Search Results
Resultados de búsqueda de Yahoo Videos. [online] Disponible en:
https://co.video.search.yahoo.com/yhs/search;_ylt=A0LEVjrru.NZ00gAyn7XdA
x.;_ylu=X3oDMTByMjB0aG5zBGNvbG8DYmYxBHBvcwMxBHZ0aWQDBHNlY wNzYw-
-?p=Cuando+Usar+Un+Deadlock&fr=yhs-iry-fullyhosted_003&hspart=iry&hsimp=yhs-
fullyhosted_003#id=2&vid=26449bd533ddff707e13d11a72f26360&action=view
 [Accesado 15 Oct. 2017].
 Technet.microsoft.com. (2017). Detectar y finalizar interbloqueos. [online]
Disponible en: https://technet.microsoft.com/es-
es/library/ms178104%28v=sql.105%29.aspx [Accesado 15 Oct. 2017].
 Techlandia.com. (2017). Citar un sitio web - Cite This For Me. [online] Disponible
en: https://techlandia.com/anular-bloqueo-base-datos-sql-como_137972/ [Accesado
15 Oct. 2017].

Das könnte Ihnen auch gefallen