Professional Documents
Culture Documents
Exercise 1 2
Exercise 1 2
1. Concurrency control
Tạo cơ sở dữ liệu account từ account.sql. Hãy thực hiện các tác vụ sau:
1.1. Tạo một transaction T, sau đó xem và thay đổi transaction isolation level của giao tác
với các lệnh:
begin transaction isolation level …;
show transaction isolation level;
set transaction isolation level …;
1.2. Tạo savepoint và sử dụng rollback với savepoint; kết thúc transaction T bằng lệnh
rollback.
1.3. Multi version concurrency control (MVCC) trong PostgreSQL
Transaction T1 Transaction T2
begin; begin;
show transaction isolation level; show transaction isolation level;
select count(*) from account;
insert into account (name,
balance) values (‘test’, 100);
select count(*) from account;
select count(*) from account;
rollback;
select count(*) from account;
rollback;
1.6. Hãy trả lời các câu hỏi tương tự như 1.5 cho transaction T6.
T5 T6
begin; begin;
select * from account where
insert into account (name, groupid=1;
groupid, balance) values (‘new’,
1, 100);
select * from account where
groupid=1;
commit; select * from account where
groupid=1;
commit;
select * from account where
groupid=1;
Hãy sửa mã lệnh của T7 và T8 để khi hai transaction này thực hiện đồng thời chỉ có một
transaction thành công.
1.8. Cho hai transaction T9 và T10 trong đó An và Bình chuyển tiền cho Cường.
T9 T10
begin; begin;
update account set balance=balance-10 update account set balance=balance-5
where id=1; where id=2;
update account set balance=balance+10 update account set balance=balance+5
where id=3; where id=3;
commit; commit;
Hãy tìm isolation level để T9 và T10 có thể thực hiện đồng thời với commit thành công.
1.9. Theo anh/chị, nên sử dụng T11 hay T12 để thực hiện giao dịch chuyển tiền từ một tài
khoản sang một tài khoản khác, tại sao?
T11 T12
begin;
update account set balance=balance-10 update account set balance=balance-10
where id=1; where id=1;
update account set balance=balance+10 update account set balance=balance+10
where id=3; where id=3;
commit;
1.10. Sử dụng pg_advisory_lock:
T13 T14
SELECT pg_advisory_lock(10); SELECT pg_advisory_lock(11);
… …
SELECT pg_advisory_lock(11); SELECT pg_advisory_lock(10);
… …
SELECT pg_advisory_unlock(11); SELECT pg_advisory_unlock(10);
SELECT pg_advisory_unlock(10); SELECT pg_advisory_unlock(11);
Hãy mô tả hiện tượng xảy ra với hai transaction T13, T14 và giải thích nguyên nhân.
2. Backup and restore
2.1. Cho trước 20 tapes. Hãy lập lịch backup theo Grand-Father-Son bắt đầu từ tháng 3/2024.
2.2. Cho trước 5 tapes A, B, C, D, E. Hãy lập lịch backup theo Hanoi Tower bắt đầu từ tháng
3/2024 với tần suất 1 lần/1 ngày.
2.3. Hãy sử dụng công cụ pg_dump, backup cơ sở dữ liệu account ban đầu (có 10 bản ghi)
khi không có transaction update/insert nào được thực hiện trong CSDL đó. Sau đó
restore bản backup này với hai trường hợp sau và nhận xét:
- Không xóa nội dung tất cả các bảng trong cơ sở dữ liệu account hiện tại
- Xóa tất cả các bảng trong cơ sở dữ liệu account hiện tại
2.4. Hãy sử dụng công cụ pg_dump, backup cơ sở dữ liệu account ban đầu. Khi bắt đầu thực
hiện pg_dump, có một transaction đã thực hiện xong câu lệnh UPDATE để thay đổi tên
của An thành Anh, nhưng chưa commit. Khi pg_dump kết thúc, chúng ta có bản
backup1, đồng thời transaction cập nhật nói trên kết thúc. Tiếp tục thực hiện pg_dump
để tạo bản backup2, với giả định không có transaction nào hoạt động trên CSDL. Hãy so
sánh nội dung của backup1 và backup2.
2.5. Point-in-time restore (PITR):
- Hãy tạo một cơ sở dữ liệu đặt tên là Maven từ file
MavenMarket_Transactions_1997.csv.
- Sau đó, thiết lập chế độ continuous archiving cho Maven.
- Khi đã thiết lập thành công continuous archiving cho Maven, tiếp tục insert các dòng
mới từ file MavenMarket_Transactions_1998.csv vào Maven bằng một chương trình
P.
- Ghi lại thời gian bắt đầu t s và kết thúc te của chương trình P.
- Hãy khôi phục CSDL Maven ở một thời điểm t 0 bất kỳ nằm giữa ts và te. Có thể khôi
phục Maven theo kiểu PITR tại một thời điểm bất kỳ trước t s được không? Tại sao?