Transaction and Shrink in SQL
- - Transaction log là gì ?
o
Transaction log là thành phần trong SQL Server.
Mỗi database sẽ có 1 hoặc nhiều
transcaction log chứa tất cả records ghi lại tất cả thông tin chỉnh sửa liên
quan đến database.
- - Tại sao lại có transaction log?
o
Transaction log có thể giúp phục hồi dữ liệu trở
về một thời điểm mong muốn.
Và vì transaction log đảm bảo hiệu xuất xử lý. Vì datafile lưu trữ dữ liệu
theo cơ chế ngẫu nhiên nên nếu mỗi thao tác cập nhật đều ghi trực tiếp vào data
file sẽ khiến database bị chậm. Transcation log sẽ giúp việc cập nhập dữ liệu
theo cơ chế tuần tự.
o
Mỗi thao tác làm thay đổi tới dữ liệu sẽ dược
ghi vào các record của transactin log. Còn giá trị dữ liệu (data pages) sẽ được lưu tạm tong buffer của
bộ nhớ RAM đê xử lý. Khi chỉnh sửa dữ liệu cũng chính là xử lý trên data pages
trên ram ( dữ liệu được chỉnh sữa gọi là Dirty pages). Khi 1 sự kiệ checkpoint
xẩy re thì dữ liệu được chỉnh sửa trên Ram sẽ được ghi vào Data file trên đĩa cứng.
- - Cấu trúc Transaction Log.
o
Transaction log sẽ có các record được định danh
là LSN (Log Squence Number) và được
lưu trữ trong các Virtual Log File.
o
Những record mà phần dữ liệu chưa có được ghi xuống
data file được gọi là Active Log.
Và ngược nếu nếu những record mà phần dữ liệu đã được ghi xuống Data File
( Đối với Recovery model là Simple),
hoặc đối với transaction log đã được
backup (Recovery model là
Full/Bulk-Logged) thì các Active Log sẽ trơ thành Inactive
Log. Vùng lưu trữ chưa Inactive
Log có thể được sử dụng để lưu trữ các Active Log mới => gọi là quá trình Log Truncation.
o
Cơ chế
ghi thêm record mới vào?
§
Các record ghi vào transaction log sẽ được ghi
theo cơ chế xoay vong, nghĩa là các active log sẽ được ghi tuần tự cho đến hết
file. Nếu lưu đến cuối file thì nó sẽ quay lại từ đầu ghi đè record vào vùng
lưu trữ đầu đang là inactive. Nếu record cua virtual log đang là Active log thì
lúc đó SQL server sẽ tang kích thức Log File( Kích thức tang theo thuộc tính
File Growth).
§
Vd minh họa.
·
Hình ảnh của 1 transaction log ban đầu chưa bắt
đầu có sự kiện check point xẩy ra .
·
Sau khi checkpoint được tạo thì các record có
LSN 45-> 49 dữ liệu ( trên ram) được ghi vao Data file. LSN 50->51 còn
đang là active log vì transaction 2 LSN đó chưa được commit.
·
Vì Virtual
log đang ở trang thái Inactive Log ( Trường hợp này là File ( Đối với Recovery
model là Simple, hoặc đối với transaction log đã được backup với Recovery model là Full/Bulk-Logged) nên
các record mới sẽ được ghi đè vào các Inactive Log này.
§
Dối với trường hợp mà recovery model Full/
Bulk-Logged mà không có thực hiện backup transaction log thì kích thức của
transaction log sẽ tang liên tục.
- -
Shrink Log file Size:
o
Để giảm physical size của physical log file, thì chúng ta cần thực hiện
shrink log file.
o
Điều kiện để thực hiện shrink a log file là :
§
Database đang trạng thái online.
§
Virtual log file is free ( inactive VLF) .
o
Shrink làm gì mà có thể giảm kích thực physical
size.
§
Thực hiện shrinking a log file là sẽ remove 1
VLF hoặc nhiều VLF ( VLF đang là
inactive VLF) ở cuối tệp đến không gian trống ở đầu file logical log. Khi không
gian trống được tạo ra ở cuối logical log thì các data page ở cuối sẽ được giải phóng (deallocated)
o
Các optionally (MSSQL 2005):
§
Release unused space : Sẽ giải phóng những unused
space trong file (những VLF đang ở trạng thái inactive ) => sẽ không di chuyển
bất kỳ data nào.
§
Reorganize files before releasing unused space
: kích thước maximum free space còn lại
sau khi thực hiện shrink.
§
Empty file by migrating the data to other files
in the same filegroup : sẽ di chuyển
data từ file được chỉ định chuyển sang các file khác trong filegroup.





Nhận xét
Đăng nhận xét