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.




·           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

Bài đăng phổ biến từ blog này

ActiveMQ 5.x

Redo and undo Log in MySQL transaction

[Kubernetes Series] - Bài 19 - Adding custom resource to Kubernetes