Mariadb 트랜잭션과 동시성 제어 장종원 Phobos90@naver.COM.

Slides:



Advertisements
Similar presentations
2008 년 11 월 20 일 실습.  실험제목 ◦ 데이터베이스 커넥션 풀  목표 ◦ 데이터베이스 커넥션 풀의 사용.
Advertisements

SQLWORLD.PE.KR 제 9 장 트랜잭션 INSIDE MICROSOFT SQL SERVER 2005: T-SQL PROGRAMMING.
뇌를 자극하는 SQL Server 장. 트랜잭션과 잠금. 뇌를 자극하는 SQL Server 장. 트랜잭션과 잠금 2 / 18 트랜잭션 개념과 문법 트랜잭션 개념  하나의 논리적 작업단위로 수행되는 일련의 작업  전부 되거나, 전부 안 되거나의.
SQL Server Index SQLER Vision 1 기 강 동 운.
SQL Server 2000 트랜잭션과 잠금 데브피아 세미나
SQL 언어 SQL.
PARK SUNGJIN Oracle 설치 PARK SUNGJIN
DB 프로그래밍 학기.
DB 프로그래밍 학기.
소리가 작으면 이어폰 사용 권장!.
You YOungseok 데이터베이스 테이블 및 인덱스 You YOungseok.
실전 데이터모델링 & 데이터베이스 설계와 구축
질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL
관계 대수와 SQL.
제 5 장 인덱스 생성 및 관리.
데이터 베이스 설계 및 실습 #1 - 오라클 설치 및 SQL 기본.
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
JDBC 프로그래밍 이수지 이동주 1.
SQL 개요 SQL 개요 - SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나
10장. 데이터베이스 보안과 권한 관리 데이터베이스 보안과 권한 관리
데이터베이스 담당교수 신정식 Chapter 4 SQL(1).
12장 데이터 읽기 일관성과 락.
6장 Mysql 명령어 한빛미디어(주).
MySQL 및 Workbench 설치 데이터 베이스.
(개정판) 뇌를 자극하는 Red Hat Fedora 리눅스 서버 & 네트워크
XXX 제안서 회 사 명 ○○○○ 주 소 대표 전화 F A X 사업자번호.
11장. 데이터베이스 서버 구축과 운영.
kHS 데이터베이스 테이블 및 인덱스 kHS.
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
5장 Mysql 데이터베이스 한빛미디어(주).
14장 뷰.
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
4.2 SQL 개요 SQL 개요 SQL은 IBM 연구소에서 1974년에 System R이라는 관계 DBMS 시제품을 연구할 때 관계 대수와 관계 해석을 기반으로, 집단 함수, 그룹화, 갱신 연산 등을 추가하여 개발된 언어 1986년에 ANSI(미국 표준 기구)에서 SQL.
2장. 관계 데이터 모델과 제약조건 관계 데이터 모델은 지금까지 제안된 데이터 모델들 중에서 가장 개념이 단순한 데이터 모델의 하나 IBM 연구소에 근무하던 E.F. Codd가 1970년에 관계 데이터 모델을 제안함 관계 데이터 모델을 최초로 구현한 가장 중요한 관계 DBMS.
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
16장. 테이블의 변경 새로운 행 삽입 테이블에서 테이블로 행을 복사 행 값의 변경 테이블에서 행 삭제
19장. 트랜잭션과 락(LOCK) 트랜잭션이란? MySQL의 트랜잭션 락(LOCK) 쉽게 배우는 MySQL 5.x
17강. 데이터 베이스 - I 데이터 베이스의 개요 Oracle 설치 기본적인 SQL문 익히기
MYSQL 설치 SQL언어 SQL언어의 활용 웹과 SQL언어와의 연동
SQL.
KHS JDBC Programming 4 KHS
YOU Youngseok 트랜잭션(Transaction) YOU Youngseok
제 19 장 (Oracle) 오라클에서 동시성 제어 (MVCC)
5장 Mysql 데이터베이스 한빛미디어(주).
KIM HEESANG PL/SQL 2 KIM HEESANG
DB연동하기 원격db접속.
MS-SQL7.0 Implementation 강의 노트
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
You YoungSEok Oracle 설치 You YoungSEok
4장. 데이터베이스와 테이블 MySQL 데이터베이스 테이블의 생성 테이블 데이터 처리(삽입, 변경, 삭제) 작업
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
13장 무결성 제약조건.
JDBC Lecture 004 By MINIO.
JSP 게시판 구현.
View(뷰) 1 가상 테이블(Virtual Relation)
3장. SQL Server 2008전체 운영 실습 및 DB와 프로그램의 연동
학습목표 학습목표 본 장은 동시성 제어와 잠금(lock) 등 효과적인 트랜잭션 관리 기법 과 필요한 명령을 다룬다. 또한 데이터베이스의 장애에 대비하여 안전한 데이터의 관리를 위한 백업과 복원 기법, 서로 다른 DBMS 간이나 다른 서버 사이의 데이터 교환을 위한 데이터.
기본적인 SELECT문 작성.
06. SQL 명지대학교 ICT 융합대학 김정호.
SQL Server 2000 세미나 View, SP &Trigger
제 18 장 (Oracle) 오라클에서 트랜잭션 지원
테이블 관리 테이블 생성,수정,삭제 데이터 입력 수정, 삭제 2010학년도 2학기.
제 23 장 오라클에서 보안 기능.
Stored program 장종원
10주 MariaDB에서 트랜잭션 지원 및 동시성 제어 기능
Data Base Mysql.
 6장. SQL 쿼리.
제 5 장 MariaDB인덱스 생성 및 관리.
임시테이블과 테이블변수 SQLWorld Study Group - 최명환 -.
Ⅰ. 데이터베이스 정의 Ⅱ. MS SQL 서버 Ⅲ. 데이터베이스 인터페이스
Presentation transcript:

Mariadb 트랜잭션과 동시성 제어 장종원 Phobos90@naver.COM

트랜잭션 데이터베이스 시스템에서 최소의 업무처리 단위 SQL문의 하나의 논리적 작업 단위로 성공하거나 실패하는 일련의 SQL문 MariaDB 서버는 트랜잭션을 기본으로 데이터의 일관성을 보증

커밋과 롤백 커밋(Commit) 롤백(Rollback) 트랜잭션에 의해 변경된 데이터에 대해 확정하는 문장 수행된 모든 문장에 대한 데이터의 변경 사항을 영구적으로 반영 실행 후 트랜잭션이 종료됨 롤백(Rollback) 트랜잭션의 변경을 취소하는 문장

커밋과 롤백 SQL 1 SQL 2 SQL 3 COMMIT 트랜잭션 트랜잭션 시작 트랜잭션 종료 ROLLBACK

실습 #1 Commit과 Rollback 실습 (1) std_heap 테이블을 다시 생성함 DROP TABLE std_heap; CREATE TABLE std_heap ( stid int, name char(20), grade int, age int, addr char(60), dno int ) ENGINE=InnoDB; (2) 트랜잭션 실행 준비 SET autocommit = 0; SET sql_safe_updates = 0; SET TRANSACTION ISOLATION LEVEL READ COMMITTED; (3) COMMIT/ROLLBACK 실습 INSERT INTO std_heap VALUES (101, 'JS Kim', 3, 22, 'Chuncheon', 3); INSERT INTO std_heap VALUES (102, ‘PK Lee', 2, 21, ‘Seoul', 1); INSERT INTO std_heap VALUES (105, ‘AB Park', 2, 20, ‘Wonju', 2); INSERT INTO std_heap VALUES (106, ‘CD Hwang', 1, 19, ‘Chuncheon', 2); INSERT INTO std_heap VALUES (110, ‘XY Choi', 2, 21, ‘Seoul', 3); COMMIT; SELECT * FROM std_heap ; DROP TABLE Dept; CREATE TABLE Dept ( dept_no int, dept_name varchar(100) ); INSERT INTO Dept VALUES(1, 'A'); INSERT INTO Dept VALUES(3, 'C'); INSERT INTO Dept VALUES(2, 'B'); INSERT INTO Dept VALUES(5, 'E'); SELECT * FROM Dept; DELETE FROM Dept where dept_name = 'B'; INSERT INTO Dept values(4, 'D'); --------------------------------------------------------------- DROP TABLE index_Dept; CREATE TABLE index_Dept ( dept_no int PRIMARY KEY, ) ORGANIZATION INDEX; INSERT INTO index_Dept VALUES(1, 'A'); INSERT INTO index_Dept VALUES(3, 'C'); INSERT INTO index_Dept VALUES(2, 'B'); INSERT INTO index_Dept VALUES(5, 'E'); SELECT * FROM index_Dept; DELETE FROM index_Dept where dept_name = 'B'; INSERT INTO index_Dept values(4, 'D'); drop index emp_dept_cluster_idx; drop cluster emp_dept_cluster including tables; -- 테이블 동시 삭제 --drop table cluster_Dept; create cluster emp_dept_cluster (dept_no int) size 1000; create index emp_dept_cluster_idx on cluster emp_dept_cluster; CREATE TABLE cluster_Dept ( ) cluster emp_dept_cluster(dept_no); INSERT INTO cluster_Dept VALUES(1, 'A'); INSERT INTO cluster_Dept VALUES(3, 'C'); INSERT INTO cluster_Dept VALUES(2, 'B'); INSERT INTO cluster_Dept VALUES(5, 'E'); SELECT * FROM cluster_Dept; DELETE FROM cluster_Dept where dept_name = 'B'; INSERT INTO cluster_Dept values(4, 'D'); ----------------------------------------------------- drop cluster hash_cluster including tables; CREATE CLUSTER hash_cluster ( hash_key int ) HASHKEYS 10000 SIZE 256 SINGLE TABLE HASH IS hash_key; CREATE TABLE hash_Dept ( ) cluster hash_cluster(dept_no); INSERT INTO hash_Dept VALUES(1, 'A'); INSERT INTO hash_Dept VALUES(3, 'C'); INSERT INTO hash_Dept VALUES(2, 'B'); INSERT INTO hash_Dept VALUES(5, 'E'); SELECT * FROM hash_Dept; DELETE FROM hash_Dept where dept_name = 'B'; INSERT INTO hash_Dept values(4, 'D');

(3) COMMIT/ROLLBACK 실습 (계속) INSERT INTO std_heap VALUES (201, ‘EE Moon', 2, 22, 'Kangrung', 1); INSERT INTO std_heap VALUES (202, ‘PL Lim', 3, 23, 'Chuncheon', 4); ROLLBACK; SELECT * FROM std_heap ; UPDATE std_heap SET name = ‘XX XXXX’, grade = 9 WHERE stid = 101; COMMIT; UPDATE std_heap SET name = ‘AA AAAA’, grade = 7 WHERE stid = 102; UPDATE std_heap SET name = ‘BB BBBB’, grade = 8 WHERE stid = 102; UPDATE std_heap SET name = ‘CC CCCC’, grade = 9 WHERE stid = 102; DROP TABLE Dept; CREATE TABLE Dept ( dept_no int, dept_name varchar(100) ); INSERT INTO Dept VALUES(1, 'A'); INSERT INTO Dept VALUES(3, 'C'); INSERT INTO Dept VALUES(2, 'B'); INSERT INTO Dept VALUES(5, 'E'); SELECT * FROM Dept; DELETE FROM Dept where dept_name = 'B'; INSERT INTO Dept values(4, 'D'); --------------------------------------------------------------- DROP TABLE index_Dept; CREATE TABLE index_Dept ( dept_no int PRIMARY KEY, ) ORGANIZATION INDEX; INSERT INTO index_Dept VALUES(1, 'A'); INSERT INTO index_Dept VALUES(3, 'C'); INSERT INTO index_Dept VALUES(2, 'B'); INSERT INTO index_Dept VALUES(5, 'E'); SELECT * FROM index_Dept; DELETE FROM index_Dept where dept_name = 'B'; INSERT INTO index_Dept values(4, 'D'); drop index emp_dept_cluster_idx; drop cluster emp_dept_cluster including tables; -- 테이블 동시 삭제 --drop table cluster_Dept; create cluster emp_dept_cluster (dept_no int) size 1000; create index emp_dept_cluster_idx on cluster emp_dept_cluster; CREATE TABLE cluster_Dept ( ) cluster emp_dept_cluster(dept_no); INSERT INTO cluster_Dept VALUES(1, 'A'); INSERT INTO cluster_Dept VALUES(3, 'C'); INSERT INTO cluster_Dept VALUES(2, 'B'); INSERT INTO cluster_Dept VALUES(5, 'E'); SELECT * FROM cluster_Dept; DELETE FROM cluster_Dept where dept_name = 'B'; INSERT INTO cluster_Dept values(4, 'D'); ----------------------------------------------------- drop cluster hash_cluster including tables; CREATE CLUSTER hash_cluster ( hash_key int ) HASHKEYS 10000 SIZE 256 SINGLE TABLE HASH IS hash_key; CREATE TABLE hash_Dept ( ) cluster hash_cluster(dept_no); INSERT INTO hash_Dept VALUES(1, 'A'); INSERT INTO hash_Dept VALUES(3, 'C'); INSERT INTO hash_Dept VALUES(2, 'B'); INSERT INTO hash_Dept VALUES(5, 'E'); SELECT * FROM hash_Dept; DELETE FROM hash_Dept where dept_name = 'B'; INSERT INTO hash_Dept values(4, 'D');

동시성 제어 트랜잭션이 동시에 수행 되면 발생할 수 있는 문제 트랜잭션 고립 수준 명령어 Lost Update(갱신 손실): 갱신 내용을 잃어버림 Dirty Read(오손 판독): 존재하지 않는 값을 읽음 Non-Repeatable Read(비반복 읽기): 여러 번 읽을 때 값이 서로 다름 Phantom Read(유령 읽기): 읽는 범위 내에 존재하는 삭제/삽입된 유령 레코드를 읽음/읽지 못함 트랜잭션 고립 수준 명령어 DBMS는 트랜잭션을 동시에 실행시키면서 Lock보다 좀 더 완화된 방법 으로 문제를 해결하기 위해 제공하는 명령어

MariaDB 세션 여러개 실행(1)

MariaDB 세션 여러개 실행(2)

MariaDB 세션 여러개 실행(3)

MariaDB 세션 여러개 실행(4)

실습 #2 갱신 손실 방지 실습 곰돌이 시간 힌둥이 Update 통장 set money = 10만 Where 이름 = 커플통장 뭐야 왜 5만원으로 되어있지? T3

다른 트랜잭션에 의해 값이 덮혀쓰이는지 테스트 트랜잭션 T1 READ UNCOMMITTED 모드 트랜잭션 T2 SET autocommit = 0; SET sql_safe_updates = 0; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT name FROM std_heap WHERE stid = 101; UPDATE std_heap SET name = ‘YY YYYY’ WHERE stid = 101; UPDATE std_heap SET name = ‘ZZ ZZZZ’ COMMIT; 왜 ZZ ZZZZ가 아닐까요?

다른 트랜잭션에 의해 값의 변경이 취소되는지 테스트 트랜잭션 T1 READ UNCOMMITTED 모드 트랜잭션 T2 SELECT name FROM std_heap WHERE stid = 101; UPDATE std_heap SET name = ‘AA AAAA’ WHERE stid = 101; UPDATE std_heap SET name = ‘BB BBBB’ COMMIT; ROLLBACK; COMMIT을 ROLLBACK 전에 실행하는 것이 불가능함!!

실습 #3 허상 읽기 실습 허상 읽기 발생 테스트 트랜잭션 T1 READ UNCOMMITTED 모드 트랜잭션 T2 SELECT name FROM std_heap WHERE stid = 101; UPDATE std_heap SET name = ‘CC CCCC’ WHERE stid = 101; ROLLBACK; COMMIT;

허상 읽기 발생 방지 테스트 트랜잭션 T1 READ UNCOMMITTED 모드 트랜잭션 T2 READ COMMITTED 모드 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SELECT name FROM std_heap WHERE stid = 101; UPDATE std_heap SET name = ‘CC CCCC’ WHERE stid = 101; COMMIT; ROLLBACK;

실습 #4 비 반복적 읽기 실습 아래 각 트랜잭션의 SELECT 결과를 화면 캡처하고, 그 이유를 작성하여 제출하시오. (1) READ COMMITTED 모드 트랜잭션 T1 READ UNCOMMITTED 모드 트랜잭션 T2 READ COMMITTED 모드 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SELECT name FROM std_heap WHERE stid = 101; UPDATE std_heap SET name = ‘CC CCCC’ WHERE stid = 101; COMMIT;

트랜잭션 T1 READ UNCOMMITTED 모드 트랜잭션 T2 REPEATABLE READ 모드 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT name FROM std_heap WHERE stid = 101; UPDATE std_heap SET name = ‘DD DDDD’ WHERE stid = 101; COMMIT;

실습 #4 직렬화 (유령 레코드 읽기) 아래 각 트랜잭션의 SELECT 결과를 화면 캡처하고, 그 이유를 작성하여 제출하시오. (1) REPEATABLE READ 모드 – 유령 레코드 발생 트랜잭션 T1 READ UNCOMMITTED 모드 트랜잭션 T2 REPEATABLE READ 모드 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT stid, name FROM std_heap WHERE stid >= 102 AND stid <= 105; INSERT INTO std_heap VALUES (103, ‘KK KKKK’, 3, 20, ‘Chuncheon’, 2); COMMIT; SELECT name FROM std_heap

트랜잭션 T1 READ UNCOMMITTED 모드 트랜잭션 T2 SERIALIZABLE 모드 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; DELETE FROM std_heap WHERE stid = 103; COMMIT; SELECT stid, name FROM std_heap WHERE stid >= 102 AND stid <= 105; INSERT INTO std_heap VALUES (103, ‘KK KKKK’, 3, 20, ‘Chuncheon’, 2);