Tối ưu hóa lưu trữ bằng nén sâu trong DB2 10
Bản chất của dữ liệu
Tin hay không là tùy bạn, khi khi dữ liu tăng lên, bn số (cardinality) của dữ liệu đó có xu
hướng giảm đi. (ND: Thuật ngữ cardinality đề cập đến sự duy nhất của dữ liệu được chứa trong
một cột (thuộc tính) cụ thể của bảng dữ liệu). Do đó, đúng là không có nhiều thứ thật sự duy nhất
trên thế giới này. Nhiều thứ có thể là duy nht khi được dùng trong một tổ hợp, nhưng bản thân
các yếu tố cơ bản không phải là tất cả nhng thứ hay thay đổi. Hãy xem xét bảng các nguyên t
tuần hoàn — mi thứ trên thế giới của chúng ta được to thành từ các cách kết hợp của mt tập
khá nhcác nguyên tố. Áp dụng khái niệm này cho dliệu và bạn thy điu này cũng hoàn toàn
đúng. Ví dụ, theo điều tra dân số mi nhất của Hoa Kỳ, có khoảng 300 triệu người sống tại Hoa
Kỳ. Tuy nhiên, chỉ có khoảng 78.800 họ duy nhất, dẫn đến bản số rt thấp với "các nhóm họ"
khổng l trong các tập tên cthể. Với các tên thậm chí còn tệ hơn, có khoảng 6.600 tên (4.400
tên duy nhất với nữ giới và 2.200 tên duy nhất với nam giới). Tên của các thành ph, các đường
phố và các đa chỉ, chưa kể đến các tên, các mô t và các thuộc tính sản phẩm, cũng có xu hướng
dư thừa rất cao với bản số thấp (có nhiều tên trùng lặp).
Nén u hoạt đng ra sao
Nén u được dựa trên nguyên là mt lượng lớn dữ liệu có xu hướng có sự dư thừa rất cao.
Nén u hoạt đng bằng cách tìm kiếm các mẫu lặp lại trong dữ liệu và thay thế các mẫu đó bằng
các ký hiệu 12-bit, được lưu trữ cùng với các mẫu mà chúng đại diện trong một từ điển tĩnh. Sau
khi từ điển này được to ra, nó được lưu trữ trong bảng (hoặc trang), cùng với dữ liu nén và
được nạp vào bnhớ bất cứ khi nào dữ liệu trong bng được truy cập (để hỗ trợ giải nén). Khi
nén u được kích hoạt, DB2 quét toàn bộ bảng để tìm kiếm các giá trị cột lặp li và các mẫu lặp
lại trong nhiu cột trong một hàng hoặc trên một trang. Nó cũng tìm kiếm các mẫu lặp li là các
chui con của mt cột cụ thể. Tuy nhiên, tìm thấy mẫu lặp li không có nghĩa là dliệu được tự
động nén. Dữ liệu chỉ được nén khi thực hin tiết kiệm vùng lưu trữ. Trong bất kỳ trường hợp
o, toàn bhàng được lưu trữ như là mt tập các ký hiệu 12-bit; các hàng không bao gi được
nén mt phần.
Nén u có thể được áp dụng cho dữ liệu nguyên thủy của người dùng (dữ liệu hàng, dliệu
XML và các chỉ mục), dữ liệu do hệ thống tạo ra (các bng tạm thời) và dữ liệu quản trị (các
hình ảnh sao lưu và các bản ghi nhật giao dịch đã lưu). Các phương tiện nén với dữ liệu quản
tr sẵn trong tất cả các ấn bn phần mm DB2; Các tínhng nén cao cấp cho dữ liệu nguyên
thy của người dùng và dliệu do hệ thống tạo ra có sẵn thông qua Tính năng tối ưu hóa lưu trữ
của DB2 (DB2 Storage Optimization Feature).
Về đầu trang
Định dạng hàng thay thế
Khi nói đến việc to ra các bảng do ngườing định nghĩa, có hai đnh dạng hàng mà bạn có th
sử dụng là tiêu chuẩn và thay thếvà đnh dạng được chọn xác đnh cách đóng gói các hàng
như thế nào khi chúng được lưu trữ trên đĩa. Định dạng hàng thay thế cho phép lưu trữ cô đọng
hơn giá tr NULL và giá tr mặc định hệ thống, cũng như các giá trđ dài bng không trong
các cột có các kiểu dữ liệu có độ dài biến đổi. (Các kiểu dữ liệu có độ dài biến đổi được DB2
công nhận là VARCHAR, VARGRAPHIC, LONG VARCHAR, LONG VARGRAPHIC,
BLOB, CLOB, DBCLOB và XML). Do đó, định dạng này thường được gọi là nén giá trị NULL
và giá trị mặc định hoặc đơn gin chỉ là nén giá tr.
Với định dạng hàng tiêu chuẩn, vùng lưu trữ cho các giá tr cột có độ dài c định được phân bổ
ngay cả khi giá trị thực tế được lưu trữ là NULL. Tương tự như vậy, các giá trị độ dài bằng
không, được lưu trữ trong các cột có kiểu dữ liệu độ dài biến đổi stiêu tn một lượng nhỏ vùng
lưu trữ. Tuy nhiên, vi định dạng hàng thay thế, các giá trị NULL trong tất cả các cột và các giá
tr độ dài bằng không trong các cột có kiểu dữ liệu độ dài biến đổi không tiêu tn vùng lưu trữ
o cả.
Khi so sánh với định dạng hàng tiêu chun, đnh dạng hàng thay thế cũng làm giảm chi phí lưu
tr cho tt cả các giá trị khác trong các cột có kiểu dữ liệu độ dài biến đổi. Tuy nhiên, sự tiêu th
vùng lưu trcho tất cả các giá trị khác NULL được lưu trữ trong các cột với kiểu dữ liệu độ dài
cđịnh lại tăng lên. Có thtìm thấy các công thức để xác định tổng số byte dùng cho các giá tr
của tt cả các kiểu dữ liệu và các định dạng hàng được h trợ trong các tài liệu tham khảo dành
cho câu lệnh CREATE TABLE.
Điều khiển định dạng hàng
Bạn có thđiều khiển đnh dạng hàng được sử dụng cho từng bảng mt. Theo mặc định, các
bảng sử dụng đnh dạng hàng tiêu chuẩn. Để tạo một bảng sử dụng định dạng hàng thay thế, ch
cần nối thêm cụm từ VALUE COMPRESSION vào câu lệnh to bảng CREATE TABLE được sử dụng
để to ra bảng đó. dụ: CREATE TABLE ... VALUE COMPRESSION.
Để thay đổi định dạng hàng đã sử dụng cho bảng hiện tại, hãy ban hành mt trong các câu lệnh
sau để thay thế:
ALTER TABLE ... ACTIVATE VALUE COMPRESSION
ALTER TABLE ... DEACTIVATE VALUE COMPRESSION
Nếu bạn kích hoạt (activate) hoặc tắt kích hoạt (deactivate) nén giá trị cho mt bảng, dữ liệu hiện
được lưu trữ trong bng đó không b thay đổi. Thay vào đó, các hàng vẫn giữ nguyên theo
đnh dạng hàng hiện có của chúng, trừ khi bn áp dụng mt hoặc nhiều biện pháp được trình bày
trong phần Các chiến lược lựa chọn trong bài này.
Đối với các bảng sử dụng định dạng hàng thay thế, bạn có thể tiết kiệm thêm vùng lưu trữ bằng
cách cho phép nén giá tr mặc định cho các cột ký t và s có độ dài c định. Điều này dẫn đến
các giá tr mặc đnh của hệ thống (là 0 với các cột số và rng vi các cột ký tự có độ dài cđịnh)
không được cụ thể hoá trong biểu diễn trên đĩa của một hàng. Bạn có thể cho phép nén các giá trị
mặc định của hệ thống cho từng cột riêng l bằng cách chỉ rõ tùy chọn cột COMPRESS SYSTEM
DEFAULT cho cột đó trong câu lnh SQL tạo bảng CREATE TABLE hoặc sửa đổi bng ALTER
TABLE ... ALTER COLUMN.
Quyết định sử dụng định dạng nào
Mặc dù đnh dạng hàng tiêu chuẩn là mt lựa chọn tốt trong hầu hết trường hợp, nhưng có một
sbảng mà đnh dạng hàng thay thế đem lại cho chúng một cách bố t lưu trữ cô đng hơn
nhiều:
Các bng ít giá tr điền vào (tức là, các bảng có chứa nhiều hàng có giá tr NULL hoặc
giá tr mặc đnh hệ thng) nên sử dụng định dạng hàng thay thế. Tuy nhiên, các yêu cầu
v vùng lưu trữ cho một hàng sẽ tăng thêm bất cứ khi nào bn cập nhật mt giá tr NULL
hoặc giá tr mặc đnh hệ thống thành mt giá trị khác NULL hoặc khác giá trị mặc định
h thống. Sự thay đổi này thường gây ra tràn bản ghi, ngay cả khi trong bảng không có
cột nào có kiểu dữ liệu độ dài biến đổi (tức là, các bảng trong đó tt cả các hàng có cùng
u cầu vùng lưu trữ như nhau khi sử dụng định dạng hàng tiêu chuẩn).
Các bng có kiểu dữ liệu độ dài biến đổi trong phần lớn các cột của chúng nên sử dụng
đnh dạng hàng thay thế.
Đối với một số bảng không có các đặc điểm nói trên, việc sử dụng định dạng hàng thay thế có
thể làm tăng các yêu cầu vùng lưu trữ. Có thể cũng đáng làm mt phép kiểm tra trong môi
trường của bạn.
Bạn có thsdụng định dạng hàng thay thế bất kể bạn có giấy phép dùng DB2 Storage
Optimization Feature hay không. Tính linh hoạt này cho phép bạn chọn cách bố trí lưu tr
đọng nhất cho mi bảng, ngay cả khi bạn chưa có kế hoạch sử dụng nén hàng. Tuy nhiên, nếu
bạn đang có kế hoạch sử dụng nén hàng, việc chọn để bắt đầu với nhiều đnh dạng hàng cô đọng
hơn sẽ làm cho vùng lưu trữ trên đĩa của bng đó nhỏ hơn trong hầu hết trường hợp, mặc dù hiệu
qulà không lớn hoặc thm c không đáng kể. Điều này là do thực tế là nén hàng có thể nén rất
tốt các giá trị NULL và các giá tr mặc định hệ thống đã cthể hóa trong các bảng có định dạng
hàng tiêu chuẩn.
Về đầu trang
Nén hàng
Nén hàng đã được gii thiệu trong DB2 9 cho Linux, UNIX và Windows và kể từ đó đã thực
hiện nhiều cải tiến đáng kể cho chức năng này trong mi bản phát hành, kết quả là chức năng nén
tch ứng thế hệ tiếp theo có sẵn trong DB2 10.1. Nén hàng đòi hi phi mua giy phép DB2
Storage Optimization Feature.
Bắt đầu t DB2 10.1, hai kiểu phương pháp nén hàng có sẵn là:
Nén hàng c điểnNói đếnng nghnén đã được sử dụng:
o Với dữ liệu bảng người dùng, kể từ DB2 9 cho Linux, UNIX và Windows.
o Với dữ liệu XML và dliệu tạm thời, kể từ DB2 9.7 cho Linux, UNIX và
Windows.
Nén hàng thích ứng — Một chế độ nén mới được giới thiệu trong DB2 10.1 mà bn
thể áp dụng cho dữ liệu bảng người dùng. Nén hàng thích ứng tốt hơn nén hàng cổ điển ở
ch nó thường đạt được nén tốt hơn yêu cầu bảo trì cơ sở dữ liệu ít hơn để duy trì t lệ
nén gần tới mức tối ưu.
Nén hàng cđiển
Nén hàng cđiển nhờ vào mt thuật toán nén dựa theo từ điển. Có một từ đin nén cho từng đối
tượng bảng. Từ điển này gm một có một ánh xạ các mẫu tng xut hiện trong các hàng của
toàn bbảng. Từ điển nén này được gọi là tđiển nén mức bảng. Có thể thấy mt dụ về cách
hoạt đng của nén hàng c đin trong Hình 1.
Hình 1. Cách hoạt động của nén hàng cổ điển
Bạn có thcho phép nén hàng theo từng bng mt. Để cón hàng c đin, bn phải cho phép
nén bảng đó và phi tồn tại một từ điển cho đối tượng dữ liệu hoặc đối tượng XML. Để cho phép
nén hàng cđiển cho một bảng trong DB2 10.1 vào lúc to bảng, hãy ban hành câu lệnh sau
CREATE TABLE ... COMPRESS YES STATIC.
Mặt khác, để cho phép nén hàng c điển cho một bảng hiện hiện có, hãy thực hin mt câu lệnh:
ALTER TABLE ... COMPRESS YES STATIC.
Trong DB2 10.1, tùy chn STATIC trong cm tCOMPRESS YES là bắt buộc trong cả hai trường
hp. Trong các phiên bn DB2 trước, bạn sử dụng cụm tCOMPRESS YES mà không thêm bất k
điều kiện nào, như sau:
CREATE TABLE ... COMPRESS YES
ALTER TABLE ... COMPRESS YES
Vic cho phép nén hàng dn đến tiết kim vùng lưu trữ cho phần lớn các bảng thực tế; t lnén
thường là 50-80% hoặc cao hơn. Hơn nữa, vùng lưu trữ cho một bảng có sử dụng nén hàng
không bao giờ vượt quá vùng lưu trữ của phiên bản không nén của cùng bảng đó.
Vic tiết kiệm vùng lưu trữ của nén hàng thường dẫn đến các hoạt động vào/ra (I/O) vật lý ít hơn
để đọc dữ liệu trong một bảng nén, do cùng một số lượng hàng được lưu trữ trên ít trang vật lý
hơn. (Nén cho phép nhiều hàng dliệu hơn được đóng gói vào cùng mt số lượng trang và t l
truy cập vùng bộ đệm tăng lên). Trong nhiều trường hợp, sự tiết kiệm vào/ra và việc sử dụng
vùng b đệm được cải thiện dẫn đến thông lượng caon và thời gian thực hin truy vấn nhanh
hơn.
Nén hàng thích ứng
Giống như nén hàng cổ điển, nén hàng tch ng nhờ vào một thuật toán nén dựa theo t điển.
Sự khác biệt là ở chỗ có thể có nhiều từ đinn cho từng đối tượng bảng. Mỗi từ đin có chứa
một ánh xạ các mẫu tng xảy ra trong các hàng suốt toàn b mt trang đơn lẻ. Do đó, các t
điển nén này được gọi là các từ điển nén mức trang. nh 2 cho thấy một dụ về cách nén hàng
tch ứng hoạt động. Nén hàng thích ứng không chỉ đem lại các t lệ nén tốt hơn đáng kể trong
nhiều trường hợp, mà còn thể thíchng với các đặc điểm dữ liệu thay đổi.