markdown:
## Bản chất của dữ liệu
Tin hay không là tùy bạn, khi khối dữ liệu tăng lên, bản 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 nhất 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ả những thứ hay thay đổi. Hãy xem xét bảng các nguyên tố tuần hoàn — mọi thứ trên thế giới của chúng ta được tạo thành từ các cách kết hợp của một tập khá nhỏ các nguyên tố. Áp dụng khái niệm này cho dữ liệu và bạn thấy điều này cũng hoàn toàn đúng. Ví dụ, theo điều tra dân số mới 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ố rất thấp với "các nhóm họ" khổng lồ trong các tập tên cụ thể. 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 sâu hoạt động ra sao
Nén sâu được dựa trên nguyên lý là một lượng lớn dữ liệu có xu hướng có sự dư thừa rất cao. Nén sâ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 tạo ra, nó được lưu trữ trong bảng (hoặc trang), cùng với dữ liệu nén và được nạp vào bộ nhớ bất cứ khi nào dữ liệu trong bảng được truy cập (để hỗ trợ giải nén). Khi nén sâ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 lại và các mẫu lặp lại trong nhiều 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 lại là các chuỗi con của một cột cụ thể. Tuy nhiên, tìm thấy mẫu lặp lại không có nghĩa là dữ liệu được tự động nén. Dữ liệu chỉ được nén khi thực hiện tiết kiệm vùng lưu trữ. Trong bất kỳ trường hợp nào, toàn bộ hàng được lưu trữ như là một tập các ký hiệu 12-bit; các hàng không bao giờ được nén một phần.
Nén sâ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, dữ liệu XML và các chỉ mục), dữ liệu do hệ thống tạo ra (các bảng 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 ký giao dịch đã lưu). Các phương tiện nén với dữ liệu quản trị có sẵn trong tất cả các ấn bản phần mềm DB2; Các tính năng nén cao cấp cho dữ liệu nguyên thủy của người dùng và dữ liệ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).
## Định dạng hàng thay thế
Khi nói đến việc tạo ra các bảng do người dùng đị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ị có độ dài bằng 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 giản 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ị có độ 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 sẽ tiêu tốn một lượng nhỏ vùng lưu trữ. Tuy nhiên, với đị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 tốn vùng lưu trữ nào cả.
Khi so sánh với định dạng hàng tiêu chuẩn, định dạng hàng thay thế cũng làm giảm chi
phí lưu trữ cho tất 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 trữ cho 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ó thể tì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 tất 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 một. 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 tảo bảng
CREATE TABLE được sử dụng để tạo ra
bảng đó. Ví 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 một trong các câu lệnh sau để thay thế:
ALTER TABLE ...
ACTIVATE VALUE COMPRESSIONALTER 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 một
bảng, dữ liệu hiện có được lưu trữ trong bảng đó 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 bạn áp dụng một
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](#adopt) 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à
rỗng với 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 lệnh SQL tạo bảng
CREATE
TABLE hoặc sửa đổi bảng
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à một lựa chọn tốt trong hầu hết trường hợp, nhưng có một số bảng mà định dạng hàng thay thế đem lại cho chúng một cách bố trí lưu trữ cô đọng hơn nhiều:
- Các bảng í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ệ thống) 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 bạn cập nhật một giá trị NULL hoặc giá trị mặc định hệ thống thành một 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 đó tất cả các hàng có cùng yê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 bảng 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 một phép kiểm tra trong môi trường của bạn.
Bạn có thể sử dụ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ữ cô đọng nhất cho mỗi 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 bảng đó nhỏ hơn trong hầu hết trường hợp, mặc dù hiệu quả là không lớn hoặc thậm chí 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 đã cụ thể hóa trong các bảng có định dạng hàng tiêu chuẩn.
## Nén hàng
Nén hàng đã được giới 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 mọi bản phát hành, kết quả là chức năng nén thích ứng thế hệ tiếp theo có sẵn trong DB2 10.1. Nén hàng đòi hỏi phải mua giấy 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ển**— Nói đến công nghệ nén đã được sử dụng:
- Với dữ liệu bảng người dùng, kể từ DB2 9 cho Linux, UNIX và Windows.
- Với dữ liệu XML và dữ liệ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à bạn có 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 và 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 một thuật toán nén dựa theo từ điển. Có một từ điển nén cho từng đối tượng bảng. Từ điển này gồm một có một ánh xạ các mẫu thường xuất hiện trong các hàng của toàn bộ bả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 một ví dụ về cách hoạt động của nén hàng cổ điển trong Hình 1.
##### Hình 1. Cách hoạt động của nén hàng cổ điển
![ Hình ảnh hiển thị cách phân loại một bảng bằng từ điển nén mức bảng để làm giảm các mẫu lặp lại](Figure1.gif)
Bạn có thể cho phép nén hàng theo từng bảng một. Để có nén hàng cổ điển, bạn phải cho
phép nén bảng đó và phải 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 tạo 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 hiện một
câu lệnh:
ALTER TABLE ... .
**COMPRESS YES
STATIC**
Trong DB2 10.1, tùy chọn
STATIC trong cụm từ
COMPRESS YES là bắt buộc trong cả hai trường hợp. Trong các
phiên bản DB2 trước, bạn sử dụng cụm từ
COMPRESS YES mà
không thêm bất kỳ điều kiện nào, như sau:
CREATE TABLE ...
COMPRESS YESALTER TABLE ... COMPRESS YES
Việc cho phép nén hàng dẫn đến tiết kiệm vùng lưu trữ cho phần lớn các bảng thực tế; tỷ lệ né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 đó.
Việc 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 dữ liệu hơn được đóng gói vào cùng một 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 cao hơn và thời gian thực hiện 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 thích ứ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ừ điển nén cho từng đối tượng bảng. Mỗi
từ điển có chứa một ánh xạ các mẫu thường xảy ra trong các hàng suốt toàn bộ một
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.* Hình 2 cho thấy một ví dụ về cách nén hàng thích ứ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 có thể thích ứng với các đặc điểm dữ liệu thay đổi.
##### Hình 2. Nén hàng thích ứng hoạt động như thế nào
![ Hình ảnh hiển thị từ điển nén mức trang](Figure2.gif)
Như với nén hàng cổ điển, bạn cho phép nén hàng thích ứng theo từng bảng một. Trong DB2 10.1, để tạo ra một bảng đã cho phép nén hàng thích ứng, bạn chỉ cần ban hành một trong những câu lệnh sau:
CREATE TABLE ...
COMPRESS YES ADAPTIVECREATE TABLE ... COMPRESS YES
Mặt khác, để cho phép nén hàng thích ứng một bảng hiện có, hãy thực hiện một câu lệnh
ALTER TABLE giống như sau:
ALTER TABLE ...
COMPRESS YES ADAPTIVEALTER TABLE ... COMPRESS YES
Trong DB2 10.1, nén hàng thích ứng là kiểu nén hàng mặc định được dùng. Vì vậy, tùy
chọn
ADAPTIVE là giá trị mặc định cho cụm từ
COMPRESS YES.
Khi bạn nâng cấp một cơ sở dữ liệu từ một phiên bản cũ của DB2 cho Linux, UNIX và
Windows, các bảng hiện có đã cho phép nén hàng cổ điển, sẽ duy trì các thiết lập nén
của mình và nén hàng cổ điển vẫn được sử dụng. Do đó, nếu bạn muốn cho phép nén hàng
thích ứng cho các bảng này, bạn phải sử dụng một trong các câu lệnh
ALTER TABLE được hiển thị ở trên.
Như đã đề cập, nén hàng thích ứng xây dựng trên nén hàng cổ điển; các từ điển nén mức bảng vẫn được sử dụng. Một từ điển mức bảng được bổ sung bằng các từ điển nén mức trang, có chứa các mục ứng với các mẫu xuất hiện thường xuyên trong một trang đơn lẻ. Từ điển mức bảng giúp loại bỏ các mẫu lặp lại trong phạm vi chung, trong khi các từ điển mức trang chịu trách nhiệm tìm ra các mẫu lặp lại cục bộ trên các trang riêng lẻ đó. Cách sử dụng sự kết hợp này của cả hai từ điển mức bảng và mức trang được minh họa trong Hình 3.
##### Hình 3. Cách các từ điển nén mức bảng và mức trang làm việc cùng nhau khi sử dụng nén thích ứng
![ Hình ảnh hiển thị sự kết hợp của hai từ điển nén cho phạm vi chung](Figure3.gif)
Các từ điển mức trang được duy trì tự động. Khi một trang đã đầy dữ liệu, trình quản lý cơ sở dữ liệu DB2 xây dựng một từ điển nén mức trang cho dữ liệu trong trang đó. Theo thời gian, trình quản lý cơ sở dữ liệu DB2 tự động xác định khi nào cần xây dựng lại từ điển cho các trang, ở đây các mẫu dữ liệu đã thay đổi đáng kể. Kết quả là, việc sử dụng nén thích ứng không chỉ mang lại tiết kiệm nén tổng thể cao hơn, mà nó còn bảo đảm rằng các tỷ lệ nén không giảm đi theo thời gian như với nén hàng cổ điển. Trong nhiều trường hợp thực tế, tỉ lệ nén vẫn duy trì gần như tối ưu theo thời gian. Như vậy, bằng cách sử dụng nén hàng thích ứng, bạn có thể làm giảm chi phí liên quan đến việc giám sát các tỷ lệ nén của các bảng và thực hiện bảo trì cần thiết (sắp xếp lại bảng không nối mạng, cổ điển) để cải thiện việc sử dụng lưu trữ.
## Khám phá các thiết lập nén
Bằng cách kiểm tra cột
COMPRESSION trong khung nhìn danh
mục hệ thống
SYSCAT.TABLES, bạn có thể xác định xem một
bảng đã cho phép nén hàng chưa và nó sử dụng định dạng hàng nào. Các giá trị có thể
có với cột này như sau:
**V.**— Sử dụng định dạng nén hàng thay thế và không nén hàng. **R.**— Sử dụng nén hàng và định dạng hàng tiêu chuẩn. **B.**— Sử dụng định dạng hàng thay thế và nén hàng **N.**— Không sử dụng nén hàng nhưng sử dụng định dạng hàng tiêu chuẩn.
Với DB2 10.1, bạn có thể xác định kiểu nén hàng nào được sử dụng trên các bảng của
mình bằng cách kiểm tra cột
ROWCOMPMODE trong khung nhìn
danh mục hệ thống
SYSCAT.TABLES. Các giá trị có thể có
với cột này như sau:
**S.**— Sử dụng nén hàng cổ điển. **A.**— Sử dụng nén hàng thích ứng. **Blank.**(Để trống) — Không cho phép nén hàng.
Cột
ROWCOMPMODE trong khung nhìn danh mục hệ thống
SYSCAT.TABLES không tồn tại trong các phiên bản trước của
DB2. Trong trường hợp này, tất cả các bảng đã cho phép nén hàng mặc nhiên sử dụng
nén hàng cổ điển.
Nếu bạn có DB2 10.1 cho Linux, UNIX và Windows đã cài đặt, có thể sử dụng truy vấn sau để nhận được các thiết lập nén cho tất cả các bảng người dùng đã được định nghĩa.
##### Liệt kê 1. Nhận các thiết lập nén với một truy vấn
SELECT SUBSTR(TABSCHEMA, 1, 10) AS TABSCHEMA, SUBSTR(TABNAME, 1, 10) AS TABNAME, COMPRESSION, ROWCOMPMODE FROM SYSCAT.TABLES WHERE TABSCHEMA NOT LIKE 'SYS%'
Khi thực hiện truy vấn này, bạn sẽ thấy các kết quả trông giống như Liệt kê 2.
##### Liệt kê 2. Các kết quả truy vấn hiển thị các thiết lập nén
Sample results are as follows: TABSCHEMA TABNAME COMPRESSION ROWCOMPMODE ---------- ---------- ----------- ----------- DB2INST1 ACCTCR R S DB2INST1 BKPF R A DB2INST1 BSIS B A DB2INST1 CDCLS N DB2INST1 CDHDR V DB2INST1 COSP B S 6 record(s) selected.
Trong ví dụ này, cho phép nén hàng tất cả các bảng ACCTCR, BKPF, BSIS và COSP. Các bảng ACCTCR và COSP sử dụng nén hàng cổ điển và các bảng BKPF và BSIS sử dụng nén hàng thích ứng. Các bảng BSIS và COSP cũng sử dụng định dạng hàng thay thế, trong khi các bảng ACCTCR và BKPF sử dụng định dạng hàng tiêu chuẩn. Bảng CDHDR sử dụng định dạng hàng thay thế mà không nén hàng còn bảng CDCLS sử dụng định dạng hàng tiêu chuẩn mà không nén hàng.
## Xây dựng một từ điển nén
Trước khi nén hàng cổ điển có thể có hiệu lực trong một bảng đã được cho phép nén,
phải có một từ điển đã tồn tại cho bảng đó. Với DB2 9, bạn đã phải biết rõ liệu một
từ điển nén đã tồn tại hay chưa và bạn đã phải khởi tạo một từ điển mức bảng nếu
cần. Có thể xây dựng một từ điển nén mức bảng (và có thể nén dữ liệu hiện có trong
một bảng) bằng cách thực hiện một hoạt động sắp xếp lại bảng (cổ điển) không nối
mạng (offline). Một hoạt động như vậy được bắt đầu bằng cách thực hiện lệnh sắp xếp
lại
REORG có chỉ rõ tùy chọn
KEEPDICTIONARY hoặc tùy chọn
RESETDICTIONARY.
Nếu lệnh
REORG được thực hiện với một trong hai tùy chọn
đã quy định và không tồn tại một từ điển nén, thì một từ điển mới sẽ được tạo ra.
Mặt khác, nếu lệnh
REORG được thực hiện với một trong hai
tùy chọn đã quy định và một từ điển nén đã tồn tại, thì từ điển hiện có hoặc sẽ được
tạo lại (
RESETDICTIONARY) hoặc giữ nguyên như hiện có
(
KEEPDICTIONARY) và dữ liệu trong bảng đó sẽ được sắp
xếp lại và được nén.
Để tạo ra một từ điển nén mới cho một bảng có tên là EMPLOYEE đã được cho phép nén sâu, (cũng như sắp xếp lại và nén dữ liệu của bảng), bạn cần thực hiện lệnh sau:
REORG TABLE employee RESETDICTIONARY
Khi thực hiện lệnh này, dữ liệu được lưu trữ trong bảng EMPLOYEE sẽ được phân tích, một từ điển nén sẽ được xây dựng và được lưu trữ tại phần đầu của bảng đó và tất cả các dữ liệu hiện có sẽ được nén và được viết vào bảng đó ngay sau từ điển nén. Hình 4 cho thấy bảng EMPLOYEE sẽ trông như thế nào trước và sau khi áp dụng nén sâu.
##### Hình 4. Cách thay đổi dữ liệu trong một bảng khi xây dựng một từ điển nén và áp dụng nén hàng cổ điển
![ Biểu đồ viết dữ liệu nén vào bảng](Figure4.gif)
Điều quan trọng cần lưu ý là vì các bản ghi trong một bảng nén được di chuyển giữa thiết bị lưu trữ và bộ nhớ dưới dạng nén, nên các bản ghi dùng cho các bảng nén được viết vào các tệp bản ghi nhật ký giao dịch cũng được nén. (Từ điển nén được nạp vào bộ nhớ khi bảng này được truy cập sao cho việc nén và giải nén có thể xảy ra).
## Tạo từ điển tự động (ADC)
Như bạn có thể tưởng tượng, các tỷ lệ nén tối ưu đạt được khi một từ điển nén được xây dựng từ một tập hợp bao gồm tất cả dữ liệu. Do đó, khi xây dựng một từ điển nén bằng cách sắp xếp lại một bảng, một tỷ lệ nén cao đạt được là do mỗi hàng trong bảng đều được sử dụng. Tuy nhiên, việc thử nghiệm đã cho thấy rằng một tỷ lệ nén tốt cũng có thể đạt được khi chỉ phân tích một lượng nhỏ dữ liệu đại diện. (Trong một số trường hợp, việc đánh giá chưa đầy 1% tổng số các hàng sẵn có đã mang lại một tỷ lệ nén là 45%). Ý niệm này là cơ sở cho một tính năng nén đã được bổ sung trong DB2 9.5 được gọi là Tạo từ điển tự động (ADC - Automatic Dictionary Creation).
Trong phiên bản 9.5 và mới hơn của DB2, nếu cho phép nén một bảng tại thời điểm nó được tạo ra, ADC sẽ làm cho một từ điển nén được xây dựng tự động sau khi một lượng dữ liệu vừa đủ đã được lưu trữ trong bảng. Ngưỡng ở đó ADC có tác dụng và bắt đầu xây dựng từ điển nén phụ thuộc vào kích cỡ hàng của bảng đó. Việc xây dựng từ điển thường bắt đầu khi 1-2 MB của các trang đã được cấp cho bảng đó. Tại thời điểm đó, ADC sẽ kiểm tra để xem có bao nhiêu dữ liệu người dùng được chứa trong bảng; nếu có mặt ít nhất 700 KB dữ liệu, một từ điển nén sẽ được xây dựng. (Lưu ý rằng các giá trị được thiết lập nội bộ và không thể thay đổi được). Các hoạt động có thể khởi động ADC gồm có chèn, nhập khẩu, tải và phân phối lại dữ liệu trên các phân vùng.
Không giống như từ điển nén được xây dựng bằng một hoạt động
REORG, từ điển được tạo ra theo cách của ADC được lưu trữ trong bảng ở
phần cuối của dữ liệu hiện có. Các bản ghi đã có trước của bảng đó vẫn còn chưa được
nén cho đến khi một hoạt động sắp xếp lại bảng không nối mạng được thực hiện hoặc
cho đến khi các bản ghi này được cập nhật (trong trường hợp nào thì mỗi bản ghi đã
thay đổi đều được nén khi các thay đổi được lưu). Các bản ghi mới được nén khi chúng
được bổ sung. (Một mục tiêu của ADC là xây dựng một từ điển nén sẽ đem lại một tỉ lệ
nén thích hợp mà không để lại một lượng lớn dữ liệu không nén trong bảng). Hình 5
cho thấy một bảng đã cho phép nén sẽ trông ra sao trước, trong và sau khi ADC xây
dựng một từ điển nén.
##### Hình 5. ADC hoạt động như thế nào
![ Hình ảnh hiển thị luồng công việc tạo bảng, dữ liệu được chèn vào, xây dựng từ điển, sau đó bảng có chứa các từ điển nén mức bảng và cuối cùng là dữ liệu nén mức trang và mức bảng](Figure5.gif)
Khi cho phép nén một bảng đã điền dữ liệu (bằng cách thiết lập thuộc tính
COMPRESS là
ON), một từ điển nén
không được tự động tạo ra ngay. Thay vào đó, khi xảy ra một hoạt động phát triển
bảng lần tới, ADC sẽ được khởi động và một số lượng nhỏ các bản ghi ở phần đầu của
bảng sẽ được sử dụng để xây dựng một từ điển nén cho toàn bộ bảng. Sau khi tạo từ
điển, dữ liệu được thêm vào bảng bằng các hoạt động chèn, nhập khẩu, tải và phân
phối lại sau đó sẽ được nén; dữ liệu có trước đó sẽ vẫn chưa nén.
Như bạn có thể thấy, việc tạo tự động một từ điển nén được điều khiển, một phần, bởi thuộc tính nén của bảng. Để ngăn cản hành vi này của ADC, đừng cho phép nén một bảng, cho đến khi bạn đã sẵn sàng xây dựng thủ công một từ điển nén và nén dữ liệu. Mặt khác, nếu bạn chọn tận dụng lợi thế của ADC, hãy nhớ rằng tỷ lệ nén với từ điển được tạo ra có thể không được tối ưu như một từ điển được tạo bằng cách sắp xếp lại bảng không nối mạng. Ngoài ra, vì bảng vẫn còn đang nối mạng trong khi xây dựng từ điển nén, nên giao dịch làm cho ADC khởi tạo sẽ phải chịu một tác động hơi tiêu cực một chút về hiệu năng khi vượt qua ngưỡng và ADC được khởi động.
Điều quan trọng cần lưu ý là các từ điển được xây dựng bằng ADC có thể, theo thời gian, dẫn đến hạ thấp mức tiết kiệm vùng lưu trữ so với các từ điển được xây dựng khi sử dụng sắp xếp lại bảng cổ điển. Ngoài ra, theo thời gian, từ điển mức bảng cho một bảng có dữ liệu được cập nhật thường xuyên có thể không còn chứa các mẫu hiệu quả nhất để thay đổi dữ liệu nữa, dẫn đến một sự suy giảm tỷ lệ nén. Trong trường hợp này, có thể cần phải định kỳ sắp xếp lại bảng cổ điển để duy trì ổn định mức tiết kiệm vùng lưu trữ cao.
## Xác định các bảng ứng cử viên để nén hàng
Nếu bạn vẫn chưa sử dụng nén hàng, bạn có thể muốn kiểm tra cơ sở dữ liệu của mình để xác định các bảng nào có thể được hưởng lợi từ việc đã nén dữ liệu của chúng. Vì nén dữ liệu giúp bạn ban đầu tiết kiệm lưu trữ trên các bảng không nén hiện có và tối ưu hóa sự tăng trưởng lưu trữ trong tương lai, bạn có thể tìm thấy các điểm yếu lưu trữ của mình bằng cách kiểm tra các bảng hiện có đang chứa một số lượng dữ liệu đáng kể hoặc các bảng mà bạn dự kiến sẽ tăng trưởng mạnh theo thời gian.
Đương nhiên, các bảng lớn nhất là ứng cử viên rõ ràng để nén, nhưng đừng bỏ sót các bảng nhỏ hơn. Nếu bạn có hàng trăm hoặc hàng ngàn bảng nhỏ, bạn có thể hưởng lợi từ hiệu ứng gộp chung của hoạt động nén. Tất nhiên, "lớn" và "nhỏ" là các thuật ngữ tương đối; thiết kế cơ sở dữ liệu của bạn sẽ xác định xem bảng có một triệu hoặc vài triệu hàng sẽ được coi là lớn hay nhỏ không.
Truy vấn dưới đây sử dụng hàm quản trị
ADMIN_GET_TAB_INFO() để trả về một danh sách theo thứ tự tất cả các tên
bảng và các kích cỡ của đối tượng dữ liệu bảng cho một lược đồ cụ thể. Để hiển thị
các thiết lập nén hiện tại và các chế độ nén hàng đang sử dụng, tập kết quả được tạo
ra đã được nối với khung nhìn
SYSCAT.TABLES và dữ liệu
trong các cột
COMPRESSION và
ROWCOMPMODE đã được trả về.
##### Liệt kê 3. Truy vấn để tìm kiếm các bảng ứng cử viên để nén
SELECT SUBSTR(T.TABSCHEMA, 1, 10) AS TABSCHEMA, SUBSTR(T.TABNAME, 1, 10) AS TABNAME, SUM(TI.DATA_OBJECT_P_SIZE)/1024/1024 AS STORAGESIZE_GB, T.COMPRESSION AS COMPRESSION, T.ROWCOMPMODE AS ROWCOMPMODE FROM TABLE (SYSPROC.ADMIN_GET_TAB_INFO('DB2INST1', '')) TI JOIN SYSCAT.TABLES T ON T.TABSCHEMA = TI.TABSCHEMA AND T.TABNAME = TI.TABNAME GROUP BY T.TABSCHEMA, T.TABNAME, T.COMPRESSION, T.ROWCOMPMODE ORDER BY STORAGESIZE_GB DESC
Truy vấn này xác định những bảng tiêu tốn vùng lưu trữ nhiều nhất trong cơ sở dữ liệu hiện tại của bạn và cung cấp cho bạn một danh sách các bảng ứng cử viên mà bạn nên bắt đầu làm việc với chúng. Trong nhiều kịch bản thực tế, phần lớn vùng lưu trữ của một cơ sở dữ liệu lại bị chiếm bởi khá ít bảng.
Sau khi bạn xác định các bảng ứng cử viên dựa trên lượng tiêu dùng vùng lưu trữ của chúng, hãy xem xét các hoạt động SQL điển hình đối với dữ liệu trong các bảng đó:
- Các bảng chỉ đọc là ứng cử viên tuyệt vời để nén hàng. Các bảng có tỷ lệ đọc/viết là đọc 70% hoặc nhiều hơn và viết là 30% hoặc ít hơn là những ứng viên tốt để nén hàng.
- Các bảng chỉ trải qua một số ít lần cập nhật có khả năng là ứng cử viên tốt để nén hàng.
- Các bảng trải qua rất nhiều lần cập nhật có thể không phải là ứng cử viên tốt để nén hàng.
- Các bảng lớn được truy cập chủ yếu thông qua các lần quét bảng chứ không phải là quét chỉ mục là các ứng cử viên tốt để nén. Điều này thường bao gồm các bảng sự kiện lớn trong các kho dữ liệu, ở đây một số lượng đáng kể các truy vấn thực hiện phép gộp chung rất nhiều. Tiết kiệm vào/ra và sử dụng vùng bộ đệm tăng lên do áp dụng nén có thể cải thiện hiệu năng truy vấn cho các bảng như vậy.
Việc sử dụng nén hàng cổ điển hay nén hàng thích ứng là tốt hơn ít phụ thuộc vào các mẫu truy cập dữ liệu hơn vào mức tiết kiệm nén thực tế mà bạn có thể đạt được bằng cách sử dụng kiểu nén nào. Bạn đưa ra quyết định cần chọn chế độ nén hàng nào sau trong quá trình này.
Nén hàng chạy tốt nhất trong môi trường bị giới hạn vào/ra hoặc bộ nhớ, ở đây tải làm việc không phải là nghẽn cổ chai trên CPU. Cần phải dùng thêm chu kỳ CPU để thực hiện nén hàng và khai triển các hàng dữ liệu bất cứ khi nào chúng được truy cập hoặc bị thay đổi. Chi phí hoạt động này có thể được bù đắp bởi các hiệu quả đạt được khi ít thực hiện các hoạt động vào/ra hơn. Nén hàng chạy rất tốt với các tải làm việc hỗ trợ ra quyết định gồm các truy vấn phân tích phức tạp thực hiện các phép gộp chung rất lớn, ở đó việc truy cập hàng chủ yếu là tuần tự và ít ngẫu nhiên.
## Đánh giá mức tiết kiệm lưu trữ do sử dụng nén hàng
Sau khi bạn đã tạo ra một danh sách các bảng ứng viên để nén, dựa trên các đặc điểm tiêu dùng lưu trữ và truy cập dữ liệu, bước tiếp theo sẽ xác định mức tiết kiệm vùng lưu trữ mà bạn có thể hy vọng đạt được khi các bảng đó thực sự được nén. Bạn có thể đánh giá mức tiết kiệm vùng lưu trữ cho bất kỳ bảng nào trước khi bạn cho phép nén hàng cho nó. Hơn nữa, bạn có thể đánh giá mức tiết kiệm vùng lưu trữ ngay cả khi bạn chưa có giấy phép cho DB2 Storage Optimization Feature.
Cũng như với chức năng nén nói chung, các cơ chế để đánh giá nén đã phát triển theo thời gian, với mục tiêu chính sẽ cung cấp các cách thực hiện nhiệm vụ này nhanh hơn và đơn giản hơn. Cơ chế lựa chọn phụ thuộc vào phiên bản phần mềm DB2 nào mà bạn đang sử dụng. Tất cả các công cụ và các hàm có sẵn trong bản phát hành cũ hơn cũng có sẵn trong DB2 10.1. Tuy nhiên, bạn có thể thấy rằng các bản sao đã cải tiến trong DB2 10.1 dễ sử dụng hơn hoặc đáp ứng nhanh hơn với dữ liệu mà bạn đang tìm kiếm.
### Đánh giá mức tiết kiệm nén hàng trong DB2 10.1
Trong DB2 10.1, cách ưa thích để đánh giá các tỷ lệ nén là dùng hàm quản trị
ADMIN_GET_TAB_COMPRESS_INFO(). Bạn có thể sử dụng hàm này
để đánh giá mức tiết kiệm nén cho một bảng cụ thể, đánh giá mức tiết kiệm nén cho
tất cả các bảng trong một lược đồ cụ thể hoặc để đánh giá mức tiết kiệm nén cho tất
cả các bảng trong cơ sở dữ liệu. Ngoài ra, hàm này tính toán mức tiết kiệm nén hiện
tại, cùng với các dự báo mức tiết kiệm đối với nén hàng cổ điển và nén hàng thích
ứng.
Cú pháp với hàm bảng
ADMIN_GET_TAB_COMPRESS_INFO() là
ADMIN_GET_TAB_COMPRESS_INFO ( ở đây:
*TableSchema*,
*TableName*) *TableSchema*(Lược đồ bảng) xác định lược đồ, nơi bảng cần lấy thông tin nén cho bảng lưu trữ, theo tên. (Nếu tham số này có một giá trị rỗng hoặc NULL, thì coi là tất cả các lược đồ). *TableName*(Tên bảng) xác định bảng, cần lấy thông tin nén cho nó, theo tên. (Nếu tham số này có một giá trị rỗng hoặc NULL, thì coi là tất cả các tên bảng).
Nếu bạn không chỉ rõ một tên bảng, hàm này tính toán các đánh giá cho tất cả các bảng trong một lược đồ cụ thể; nếu bạn không chỉ rõ một tên bảng hoặc một lược đồ, nó sẽ tính toán các đánh giá cho tất cả các bảng trong cơ sở dữ liệu. (Nếu lược đồ hoặc cơ sở dữ liệu của bạn có chứa hàng trăm hoặc hàng ngàn bảng, thời gian xử lý có thể rất đáng kể; trong trường hợp này, hãy cố gắng hạn chế các truy vấn của bạn để chỉ tính toán các đánh giá cho những bảng nào mà bạn đang xem xét nén nó).
Có thể xem cấu trúc của bảng do hàm
ADMIN_GET_TAB_COMPRESS_INFO() trả về trong Bảng 1.
##### Bảng 1. Bảng do hàm ADMIN_GET_TAB_COMPRESS_INFO() trả về
|Tên cột||Kiểu dữ liệu||Mô tả|
|TABSCHEMA||VARCHAR(128)||Tên lược đồ|
|TABNAME||VARCHAR(128)||Tên bảng|
|DBPARTITIONNUM||SMALLINT||Số phân vùng cơ sở dữ liệu|
|OBJECT_TYPE||VARCHAR(4)||Kiểu đối tượng mà thông tin nén sẽ được thông báo về nó, có thể là một trong
những kiểu sau:
|
|ROWCOMPMODE||CHAR(1)||Chế độ nén hàng hiện tại cho đối tượng này, có thể là một trong các chế độ
sau:
|
|PCTPAGESSAVED_CURRENT||SMALLINT||Tỷ lệ phần trăm hiện tại của các trang đã tiết kiệm được do nén hàng|
|AVGROWSIZE_CURRENT||SMALLINT||Độ dài bản ghi trung bình hiện tại|
|PCTPAGESSAVED_STATIC||SMALLINT||Tỷ lệ phần trăm ước tính của các trang đã tiết kiệm được do nén hàng cổ điển|
|AVGROWSIZE_STATIC||SMALLINT||Độ dài bản ghi trung bình ước tính của nén hàng cổ điển|
|PCTPAGESSAVED_ADAPTIVE||SMALLINT||Tỷ lệ phần trăm ước tính của các trang đã tiết kiệm được do nén hàng thích ứng|
|AVGROWSIZE_ADAPTIVE||SMALLINT||Độ dài bản ghi trung bình ước tính của nén hàng thích ứng|
Như vậy, nếu bạn muốn nhận được một đánh giá là sẽ tiết kiệm được bao nhiêu vùng lưu trữ nếu dữ liệu trong mọi bảng trong một lược đồ tên là db2inst1 được nén, bạn có thể làm việc này bằng cách thực hiện một truy vấn trông giống như Liệt kê 4.
##### Liệt kê 4. Truy vấn để đánh giá mức tiết kiệm lưu trữ
SELECT SUBSTR(TABNAME,1,10) AS TABNAME, PCTPAGESSAVED_CURRENT, PCTPAGESSAVED_STATIC, PCTPAGESSAVED_ADAPTIVE FROM TABLE(SYSPROC.ADMIN_GET_TAB_COMPRESS_INFO('DB2INST1', ''))
Khi sử dụng kết quả truy vấn này, bạn có thể dễ dàng xác định xem có nên cho phép nén hàng một bảng cụ thể không và bạn nên sử dụng chế độ nén hàng nào — ví dụ, nếu truy vấn trước đó đã trả về một tập kết quả trông giống như Liệt kê 5.
##### Liệt kê 5. Các kết quả mẫu
TABNAME PCTPAGESSAVED_CURRENT PCTPAGESSAVED_STATIC PCTPAGESSAVED_ADAPTIVE ---------- --------------------- -------------------- ---------------------- ACCTCR 0 68 72 BKPF 0 83 90 BSIS 0 82 90 CDCLS 0 11 17 CDHDR 0 70 73 COSP 0 87 91 6 record(s) selected.
Trong sáu bảng đã tính toán các đánh giá nén cho chúng, năm bảng hiển thị tiềm năng nén rất tốt. Bảng CDCLS là bảng duy nhất có thể không được hưởng lợi từ nén. Và trong mọi trường hợp, có vẻ như nén hàng thích ứng sẽ mang lại kết quả tốt hơn so với nén hàng cổ điển.
Tính toán hiệu số giữa các giá trị của cột PCTPAGESSAVED_STATIC và cột PCTPAGESSAVED_ADAPTIVE sẽ giúp bạn xác định sự lựa chọn tốt nhất cho chế độ nén hàng. Tuy nhiên, hãy hiểu rõ là sự thay đổi các giá trị của cột PCTPAGESSAVED_CURRENT không phải là tuyến tính. Ví dụ, hãy xem xét các bảng ACCTCR và COSP được hiển thị trong ví dụ trên. Với bảng ACCTCR, bạn có thể hy vọng mức tiết kiệm vùng lưu trữ là 68% với nén hàng cổ điển và mức tiết kiệm vùng lưu trữ là 72% với nén hàng thích ứng. Với bảng COSP, mức tiết kiệm đánh giá là 87% với nén hàng cổ điển và 91 % với nén hàng thích ứng. Mặc dù hiệu số tuyệt đối giữa hai kiểu là 4% đối với cả hai bảng, mức tiết kiệm tương đối mà nén hàng thích ứng có thể đạt được so với nén hàng cổ điển có khác nhau. Giả sử mỗi bảng có kích cỡ 100 GB khi chưa nén. Với bảng ACCTCR, kích cỡ đánh giá là 32 GB với nén hàng cổ điển và 28 GB với nén hàng thích ứng, tạo nên một hiệu số bằng khoảng 12,5%. Tuy nhiên, kích cỡ đánh giá cho bảng COSP là 13 GB với nén hàng cổ điển và 9 GB với nén hàng thích ứng, tạo nên một hiệu số xấp xỉ 30%.
Trong ví dụ trước, bảng COSP là một ứng cử viên tốt để nén hàng thích ứng, nhưng bảng ACCTCR có thể không là một ứng cử viên tốt. Ngoài ra, các giá trị ước tính chỉ ra rằng nén thích ứng sẽ làm giảm kích cỡ lưu trữ cho bảng CDHDR đến mức chỉ thêm 10% nữa so với nén hàng cổ điển. Do đó, bạn có thể không muốn cho phép nén thích ứng cho các bảng CDHDR và ACCTCR trừ khi bạn hy vọng các đặc tính dữ liệu thay đổi đáng kể hoặc bạn mong đợi nhiều dữ liệu mới sẽ được chèn vào. Với các bảng còn lại, nén thích ứng có thể là sự lựa chọn tốt hơn vì mức tiết kiệm vùng lưu trữ tăng thêm đáng kể lên đến 45%.
### Đánh giá mức tiết kiệm nén hàng trong DB2 9.7 và 9.5
Trong DB2 9.7 và 9.5, có sẵn các hàm quản trị rất giống với hàm
ADMIN_GET_TAB_COMPRESS_INFO() kèm theo DB2 10.1, mặc dù chúng có tên và
các chữ ký hơi khác nhau một chút. Trong DB2 9.7, hàm này được gọi là
ADMIN_GET_TAB_COMPRESS_INFO_V97() và trong DB2 9.5, tên của
nó là
ADMIN_GET_TAB_COMPRESS_INFO(). Không giống như hàm
của DB2 10.1 có hai tham số đầu vào, các hàm của DB2 9.5 và 9.7 có ba tham số. Tham
số thứ ba là chế độ thực hiện và để đánh giá nén, bạn chuyển giao chuỗi ký tự
'ESTIMATE' làm giá trị cho tham số này. Cấu trúc của các
bảng do các hàm của DB2 9.5 và 9.7 trả về cũng khác đáng kể so với cấu trúc của bảng
do hàm của DB2 10.1 tạo ra; có thể thấy cấu trúc của bảng được các hàm của DB2 9.5
and 9.7 trả về trong Bảng 2.
##### Bảng 2. Bảng do các hàm của DB2 9.5 and 9.7 trả về
|Tên cột||Kiểu dữ liệu||Mô tả|
|TABSCHEMA||VARCHAR(128)||Tên lược đồ|
|TABNAME||VARCHAR(128)||Tên bảng|
|DBPARTITIONNUM||SMALLINT||Số phân vùng cơ sở dữ liệu|
|DATA_PARTITION_ID||INTEGER||Số phân vùng dữ liệu|
|COMPRESS_ATTR||CHAR(1)||Trạng thái của thuộc tính |COMPRESS trên bảng, có thể là một
trong các trạng thái sau:
|DICT_BUILDER||VARCHAR(30)||Đường dẫn mã được lấy để xây dựng từ điển nén, có thể là một trong các đường
dẫn sau:
|
|DICT_BUILD_TIMESTAMP||TIMESTAMP||Ngày tháng và thời gian xây dựng từ điển nén, nếu không có sẵn từ điển nào, dấu thời gian là NULL.|
|COMPRESS_DICT_SIZE||BIGINT||Kích cỡ của từ điển nén, tính theo byte.|
|EXPAND_DICT_SIZE||BIGINT||Kích cỡ của từ điển mở rộng, tính theo byte.|
|ROWS_SAMPLED||INTEGER||Số các bản ghi góp phần vào việc xây dựng từ điển; các bảng được di trú với các từ điển nén sẽ trả về NULL trong cột này.|
|PAGES_SAVED_PERCENT||SMALLINT||Tỷ lệ phần trăm của các trang đã tiết kiệm được do nén. Thông tin này chỉ dựa trên các dữ liệu bản ghi trong bộ đệm mẫu. Các bảng đã di trú với các từ điển nén sẽ trả về NULL trong cột này.|
|BYTES_SAVED_PERCENT||SMALLINT||Tỷ lệ phần trăm các byte đã tiết kiệm được do nén. Thông tin này chỉ dựa trên các dữ liệu bản ghi trong bộ đệm mẫu. Các bảng đã di trú với các từ điển nén sẽ trả về NULL trong cột này.|
|AVG_COMPRESS_REC_LENGTH||SMALLINT||Độ dài bản ghi đã nén trung bình của các bản ghi góp phần vào việc xây dựng từ điển. Các bảng đã di trú với các từ điển nén sẽ trả về NULL trong cột này.|
Hơn nữa, thời gian xử lý với các hàm quản trị có thể lâu hơn đáng kể so với thời gian xử lý với các hàm quản trị trong DB2 10.1 vì phải thực hiện quét toàn bộ bảng cho mỗi bảng để tính toán các đánh giá nén.
### Đánh giá mức tiết kiệm nén hàng trong DB2 9
DB2 9 là bản phát hành DB2 đầu tiên có hỗ trợ nén hàng, không cung cấp bất kỳ các hàm
quản trị nào được giới thiệu trong các phiên bản sau này. Tuy nhiên, nếu bạn đang sử
dụng phiên bản này, bạn vẫn có thể xác định được các bảng nào sẽ được hưởng lợi
nhiều nhất từ nén hàng khi sử dụng tiện ích kiểm tra Inspect. Được gọi ra bằng cách
thực hiện lệnh
INSPECT có chỉ rõ tùy chọn
ROWCOMPESTIMATE, tiện ích Inspect này sẽ kiểm tra từng hàng
trong một bảng cụ thể, xây dựng một từ điển nén từ các dữ liệu đã tìm ra và sử dụng
từ điển này để đánh giá sẽ tiết kiệm được bao nhiêu vùng lưu trữ khi nén dữ liệu
trong bảng.
Ví dụ, để đánh giá sẽ tiết kiệm được bao nhiêu vùng lưu trữ khi nén dữ liệu trong một
bảng tên là EMPLOYEE, bạn cần thực hiện một lệnh
INSPECT
như sau:
INSPECT ROWCOMPESTIMATE TABLE NAME employee RESULTS employee.rowcompestimate.out
Chạy lệnh này có chỉ rõ tùy chọn
RESULTS sẽ làm cho tiện
ích Inspect lưu kết quả được tạo ra vào một tệp nằm trong thư mục dữ liệu chẩn đoán.
Tuy nhiên, trước khi bạn có thể xem xét các thông tin đã lưu trong tệp này, bạn phải
định dạng nó bằng cách sử dụng
db2inspf:
db2inspf employee.rowcompestimate.out
employee.rowcompestimate.txt.
Tệp định dạng được tạo sẽ chứa thông tin về mức tiết kiệm nén đánh giá sẽ trông giống như Liệt kê 6, khi được mở ra xem.
##### Liệt kê 6. Đánh giá mức tiết kiệm nén hàng
DATABASE: TEST VERSION : SQL10010 2011-11-07-18.39.23.555355 Action: ROWCOMPESTIMATE TABLE Schema name: DB2INST1 Table name: EMPLOYEE Tablespace ID: 4 Object ID: 8 Result file name: employee.rowcompestimate.out Table phase start [...] Data phase start. Object: 8 Tablespace: 4 Row compression estimate results: Percentage of pages saved from compression: 68 Percentage of bytes saved from compression: 68 Compression dictionary size: 32640 bytes. Expansion dictionary size: 32768 bytes. Data phase end. Table phase end. Processing has completed. 2011-11-07-18.40.08.349345
Nếu cho phép nén sâu một bảng (tức là, thuộc tính
COMPRESS
được đặt là
YES) trước khi thực hiện lệnh
INSPECT, từ điển nén, được xây dựng và được sử dụng để đánh
giá mức tiết kiệm vùng lưu trữ, sẽ được ghi vào bảng đó, ở phần cuối của dữ liệu
hiện có — đã tạo ra một từ điển nén không tồn tại. (Nếu không, từ điển nén
được tạo ra sẽ bị huỷ bỏ). Hình 6 hiển thị một bảng trước và sau khi sử dụng tiện
ích Inspect để đánh giá mức tiết kiệm lưu trữ nếu cho phép nén sâu bảng đó trước khi
nhận được đánh giá này.
##### Hình 6. Dữ liệu trong một bảng thay đổi như thế nào khi dùng tiện ích Inspect đánh giá một bảng đã cho phép nén sâu
![ Biểu đồ hiển thị khi chạy tiện ích inspect từ điển nén mức bảng được thêm vào](Figure6.gif)
Bất kể sử dụng phương pháp nào để tạo ra nó, một khi một từ điển nén đã được xây dựng và được viết vào một bảng, các bản ghi mới được thêm vào bảng đó sẽ tự động được nén. Nếu từ điển nén đã được tiện ích Inspect tạo ra, các bản ghi đã có từ trước trong bảng sẽ giữ nguyên không nén cho đến khi thực hiện một hoạt động sắp xếp lại bảng không nối mạng hoặc cập nhật các bản ghi đã có trước đó (trong trường hợp này thì mỗi bản ghi đã sửa đổi sẽ đều được nén).
Trong các phiên bản DB2 sau này, bạn không nên sử dụng tiện ích Inspect để xây dựng một từ điển mức bảng mà thay vào đó nên dựa vào ADC.
## Nén chỉ mục
Bạn có thể áp dụng nén cho các chỉ mục nếu bạn đang sử dụng phiên bản DB2 9.7 hoặc mới hơn và có một giấy phép cho DB2 Storage Optimization Feature. Nén các chỉ mục dẫn đến các trang lá ít hơn và trong nhiều trường hợp, giúp giảm độ sâu của cây chỉ mục. Điều này cho phép truy cập trang chỉ mục ít hơn để tìm một khóa cụ thể và, như trong trường hợp nén hàng, cho phép sử dụng tốt hơn các vùng bộ đệm và đòi hỏi các hoạt động vào/ra vật lý ít hơn. Trong nhiều trường hợp thực tế, nén chỉ mục có thể cải thiện đáng kể hiệu năng truy vấn.
Bạn có thể cho phép nén chỉ mục cho từng chỉ mục riêng lẻ. Khi bạn tạo một chỉ mục, chỉ mục đó thừa hưởng thiết lập nén của nó từ bảng bên dưới. Đó là, tất cả các chỉ mục, mà bạn tạo ra trên các bảng đã cho phép nén hàng cổ điển hoặc nén hàng thích ứng, cũng được nén. Vì vậy, bạn có thể thấy sẽ có ích nếu tạo ra các bảng có cho phép nén hoặc thay đổi các bảng để cho phép nén hàng trước khi bạn tạo ra bất kỳ chỉ mục nào trên chúng.
Nén chỉ mục sử dụng một tổ hợp của ba kỹ thuật để giảm lượng dữ liệu được lưu trữ trên đĩa. Đạt được tiết kiệm vùng lưu trữ bằng cách điều chỉnh động số lượng các khóa chỉ mục, chứ không phải dành riêng vùng lưu trữ cho số lượng khóa cao nhất có thể có, được lưu trữ trong một trang. Các mục chỉ mục, trong đó gồm có một khóa chỉ mục và một danh sách RID, được nén bằng cách loại bỏ các tiền tố dư thừa khỏi các khóa trong một trang đơn lẻ. Với các khoá trùng lặp, các RID liên kết trong mỗi danh sách được nén bằng cách áp dụng mã hóa delta.
Giống như nén hàng thích ứng và không giống như nén hàng cổ điển, nén chỉ mục là hoàn toàn tự động. Mức tiết kiệm nén tối ưu được duy trì theo thời gian và không cần phải giám sát và sắp xếp lại các chỉ mục để cải thiện các tỷ lệ nén.
## Xác định các chỉ mục ứng cử viên với nén chỉ mục
Các ứng cử viên tốt nhất để nén là các chỉ mục có các khóa dài (ví dụ, các chỉ mục nhiều cột hoặc các chỉ mục dựa vào dữ liệu ký tự) và các chỉ mục có chứa nhiều khóa trùng lặp (ví dụ, các chỉ mục dựa trên một cột hoặc một số cột hạn chế có bản số thấp). Ngoài ra, các chỉ mục có liên quan đến các cột có độ dài biến đổi (ví dụ, các cột VARCHAR) có thể được hưởng lợi từ việc sử dụng vùng lưu trữ tốt hơn là các đề xuất quản lý vùng trang chỉ mục động.
Các chỉ mục nhiều cột nói chung nén tốt hơn nếu các cột khóa trên đầu có bản số từ thấp đến trung bình còn các cột có bản số cao hơn hoặc các cột giá trị duy nhất có xu hướng ở phía cuối của danh sách cột khóa. Tùy thuộc vào các đặc tính của các truy vấn mà bạn dự kiến các chỉ mục của mình sẽ hỗ trợ, có thể sắp xếp lại cột có khả năng mà không phải hy sinh hiệu năng truy vấn. Cũng đáng công kiểm tra thứ tự và bản số cho các cột trong các chỉ mục lớn hơn của bạn, đặc biệt là trong các kịch bản tổ chức kho dữ liệu. Trong các trường hợp này, phần lớn các truy vấn tính toán gộp các giá trị trên một số lượng lớn hơn các hàng đủ điều kiện và các đặc điểm truy vấn thường dễ dự báo trước hơn nhiều so với các tải làm việc OLTP.
Các ví dụ về các chỉ mục có thể được hưởng lợi ít hơn từ hoạt động nén là các chỉ mục trên một cột kiểu số duy nhất đơn lẻ hoặc các chỉ mục nhiều cột duy nhất nhưng cột có bản số cao nhất lại là cột chỉ mục trên đầu.
## Đánh giá mức tiết kiệm vùng lưu trữ với nén chỉ mục
Khi quyết định nén các chỉ mục nào, đánh giá về tiết kiệm vùng lưu trữ đóng một vai trò lớn hơn so với trường hợp nén bảng. Chi phí tính toán liên quan đến nén chỉ mục thấp hơn so với nén hàng và mức tiết kiệm vùng lưu trữ thường tương đương trực tiếp hơn với các cải tiến hiệu năng tổng thể. Nếu bạn có thể đạt được mức tiết kiệm vùng lưu trữ đáng kể cho bất kỳ các chỉ mục nào của bạn trong một tải làm việc OLTP, thì nén chúng là một ý tưởng tốt.
Tương tự như hàm
ADMIN_GET_TAB_COMPRESS_INFO(), có thể sử
dụng hàm
ADMIN_GET_INDEX_COMPRESS_INFO() để đánh giá mức
tiết kiệm vùng lưu trữ với nén chỉ mục. Hàm này có thể được sử dụng để đánh giá mức
tiết kiệm khi nén cho một chỉ mục đơn, cho tất cả các chỉ mục trên một bảng cụ thể,
cho tất cả các chỉ mục trong một lược đồ cụ thể hoặc cho tất cả các chỉ mục trong
một cơ sở dữ liệu; ba tham số đầu vào đầu tiên điều khiển chế độ thực hiện. Cú pháp
cho hàm bảng
ADMIN_GET_INDEX_COMPRESS_INFO() là:
ADMIN_GET_INDEX_COMPRESS_INFO (
*ObjectType*,
*ObjectSchema*, *ObjectName*, *Member*,
*DataPartitionID*)
Ở đây:
*ObjectType*(Kiểu đối tượng) xác định kiểu đối tượng cần lấy thông tin về mức tiết kiệm cho nó. Tham số này phải được gán cho một trong các giá trị phân biệt chữ hoa, chữ thường sau đây:
- 'T', NULL hoặc một chuỗi rỗng để cho biết một bảng.
- 'I' cho một chỉ mục.
*ObjectSchema*(Lược đồ đối tượng) xác định lược đồ, nơi đối tượng lưu trữ, theo tên. *ObjectName*(Tên đối tượng) xác định đối tượng, cần lấy thông tin về đối tượng lưu trữ, theo tên. *Member*(Thành viên) xác định một số thành viên cơ sở dữ liệu. (Khi cung cấp một giá trị cho tham số này, thông tin chỉ được trả về cho các chỉ mục nằm trong thành viên cơ sở dữ liệu đã chỉ rõ). *DataPartitionID*xác định ID của phân vùng dữ liệu. (Khi một giá trị được cung cấp cho tham số này, thông tin chỉ được trả về cho các phân vùng chỉ mục đã được định nghĩa trên một phân vùng dữ liệu đã chỉ rõ).
Nếu bạn muốn đánh giá mức tiết kiệm vùng lưu trữ cho một chỉ mục đơn lẻ hay cho tất
cả các chỉ mục trong một lược đồ cụ thể, hãy chỉ rõ kiểu đối tượng là
'I'. Để đánh giá mức tiết kiệm vùng lưu trữ cho tất cả các
chỉ mục trên một bảng cụ thể hoặc trên tất cả các bảng trong một lược đồ hoặc cơ sở
dữ liệu, hãy chỉ rõ kiểu đối tượng là
'T', NULL hoặc một
chuỗi rỗng. Tùy thuộc vào giá trị của tham số kiểu đối tượng, bạn có thể sử dụng các
tham số tên đối tượng và các tham số lược đồ đối tượng để xác định bảng hoặc chỉ mục
cần phân tích. Ngoài ra, bạn có thể bỏ lại các tham số tên đối tượng và các tham số
lược đồ đối tượng là NULL hoặc các chuỗi rỗng để đánh giá mức tiết kiệm nén cho một
loạt các chỉ mục.
Cấu trúc của bảng do hàm
ADMIN_GET_INDEX_COMPRESS_INFO()
trả về được hiển thị trong Bảng 3.
##### Bảng 3. Bảng do hàm
ADMIN_GET_INDEX_COMPRESS_INFO() trả về
|Tên cột||Kiểu dữ liệu||Mô tả|
|INDSCHEMA||VARCHAR(128)||Tên lược đồ chỉ mục|
|INDNAME||VARCHAR(128)||Tên chỉ mục|
|TABSCHEMA||VARCHAR(128)||Tên lược đồ bảng|
|TABNAME||VARCHAR(128)||Tên bảng|
|DBPARTITIONNUM||SMALLINT||Số phân vùng cơ sở dữ liệu|
|IID||INTEGER||Mã định danh (ID) chỉ mục|
|DATAPARTITIONID||INTEGER||Mã định danh (ID) phân vùng dữ liệu|
|COMPRESS_ATTR||CHAR(1)||Trạng thái của thuộc tính |
|INDEX_COMPRESSED||CHAR(1)||Định dạng chỉ mục vật lý, có thể là một trong các định dạng sau:
|
|PCT_PAGES_SAVED||SMALLINT||Tỷ lệ phần trăm của các trang đã tiết kiệm được do hoạt động nén. Nếu chỉ
mục này không được nén về vật lý (|
|NUM_LEAF_PAGES_SAVED||SMALLINT||Số lượng các trang lá đã tiết kiệm được. Nếu chỉ mục này không được nén về
vật lý (|
Do đó, nếu bạn muốn nhận được một đánh giá về sẽ tiết kiệm được bao nhiêu vùng lưu trữ nếu dữ liệu trong mỗi chỉ mục trên một bảng có tên là EMPLOYEE (trong một lược đồ có tên là DB2INST1) được nén, bạn có thể làm như vậy bằng cách thực hiện một truy vấn giống như Liệt kê 7.
##### Liệt kê 7. Truy vấn ví dụ để thu được nén chỉ mục
SELECT SUBSTR(INDNAME, 1, 20) AS INDNAME, COMPRESS_ATTR, PCT_PAGES_SAVED FROM TABLE(SYSPROC.ADMIN_GET_INDEX_COMPRESS_INFO('T', 'DB2INST1', 'EMPLOYEE', NULL, NULL))
Khi sử dụng kết quả của truy vấn này, bạn có thể dễ dàng xác định xem có nên cho phép nén một chỉ mục cụ thể không. Ví dụ, nếu truy vấn trước đó đã trả về một tập kết quả trông giống như Liệt kê 8:
##### Liệt kê 8. Các kết quả truy vấn với nén chỉ mục
INDNAME COMPRESS_ATTR PCT_PAGES_SAVED -------------------- ------------- --------------- EMPLOYEE~0 N 46 EMPLOYEE~1 N 57 EMPLOYEE~2 N 71 EMPLOYEE~3 N 71 EMPLOYEE~4 N 45 EMPLOYEE~5 N 71 EMPLOYEE~6 N 70 EMPLOYEE~BUT N 71 8 record(s) selected.
Thật dễ thấy là hầu hết các chỉ mục trên bảng EMPLOYEE nén rất tốt, có nhiều chỉ mục tiết kiệm đến 70% trong vùng lưu trữ.
Nếu bạn sử dụng hàm
ADMIN_GET_INDEX_COMPRESS_INFO() để
phân tích các chỉ mục đã được nén, thì mức tiết kiệm nén được trả về phản ánh mức
tiết kiệm thực tế thu được, chứ không phải chỉ là đánh giá. Ngoài ra, bạn có thể thu
được thông tin về mức tiết kiệm hiện tại được thực hiện bằng nén chỉ mục nhờ kiểm
tra cột PCTPAGESSAVED của khung nhìn danh mục hệ thống SYSCAT.TABLES. (Lệnh RUNSTATS
duy trì các giá trị của cột này).
## Nén các bảng tạm thời
Bắt đầu từ DB2 9.7, nếu bạn có một giấy phép cho DB2 Storage Optimization Feature, bạn có thể áp dụng nén cho các bảng tạm thời. Không giống như nén chỉ mục và nén hàng, bạn không phải cho phép nén các bảng tạm thời. Việc nén được thực hiện tự động và áp dụng cho các bảng tạm thời do người dùng định nghĩa và các bảng tạm thời của hệ thống. (Các bảng tạm thời chung do người dùng định nghĩa có hai biến thể: các bảng tạm thời chung đã tạo (các CGTT) và các bảng tạm thời chung đã khai báo (các DGTT). Các bảng tạm thời của hệ thống được sử dụng bởi một số tiện ích và các hoạt động bảo trì, chẳng hạn như sắp xếp lại bảng và phân phối lại dữ liệu. Trong lúc xử lý truy vấn, trình quản lý cơ sở dữ liệu DB2 cũng có thể tạo ra và sử dụng các bảng tạm thời cho các hoạt động phải gom góp lại các kết quả trung gian, ví dụ như sắp thứ tự, các phép nối băm hoặc các hàng đợi bảng).
Cơ chế được sử dụng để nén các bảng tạm thời giống như cơ chế được sử dụng để nén hàng cổ điển với ADC, mặc dù hành vi thời gian chạy có hơi khác so với các bảng thường trực. Hầu hết các bảng tạm thời, đặc biệt là các bảng nhỏ, không gây ra bất kỳ vào/ra vật lý nào. Như vậy, ngưỡng để xây dựng từ điển nén là 100 MB thay vì 2 MB. Ngưỡng cao hơn bảo đảm rằng các bảng tạm thời nhỏ thường vẫn được lưu đầy đủ trong bộ đệm không phải nén, nhưng bảo đảm rằng các bảng tạm thời lớn hơn có thể phải lưu vào đĩa sẽ chứa dữ liệu nén. Ngoài ra để tránh vào/ra vật lý, nén với các bảng tạm thời bảo đảm rằng các bảng tạm thời lớn sử dụng các vùng bộ đệm hiệu quả hơn, giúp tiếp tục tránh được vào/ra đĩa vật lý.
## Các chiến lược lựa chọn
Sau khi bạn xác định tập các bảng và các chỉ mục nào cần nén, bước tiếp theo sẽ cho phép nén các bảng và các chỉ mục này. Việc thay đổi các thiết lập nén cho các bảng có sẵn đã điền dữ liệu, sẽ giúp làm chậm tốc độ phát triển của chúng và dữ liệu được chèn vào sẽ hưởng lợi từ các thiết lập nén mới. Nếu mục tiêu của bạn sẽ làm giảm vùng lưu trữ dữ liệu hiện có của bạn, có thể là vì bạn muốn làm giảm vùng vật lý mà cơ sở dữ liệu của bạn sử dụng, bạn phải áp dụng nén với dữ liệu này.
Bạn có thể sử dụng các chiến lược sau để giúp áp dụng nén cho lượng lớn dữ liệu hiện có, giải phóng vùng đĩa hiện đang bị chiếm bởi dữ liệu đó và trả lại vùng này ra cho hệ thống tệp. Bạn sẽ thấy thông tin này hầu hết có ích khi bạn lần đầu thực hiện nén hàng hay nén chỉ mục hoặc khi bạn đang nâng cấp lên DB2 10.1 từ phiên bản DB2 cũ hơn.
### Áp dụng nén cho dữ liệu hiện có
Cách đơn giản nhất để áp dụng nén cho dữ liệu hiện có là thực hiện sắp xếp lại bảng
cổ điển. Nếu bạn đã thay đổi các thiết lập để nén hàng hoặc nén giá trị, thì hãy
thực hiện lệnh sắp xếp lại bảng
REORG TABLE có chỉ rõ tùy
chọn
RESETDICTIONARY. Nếu một số bảng của bạn có các cột
XML, bạn cũng cần chỉ rõ cụm từ
LONGLOBDATA để nén các
tài liệu XML không nối mạng. Nếu bạn đã thay đổi các thiết lập nén chỉ cho các chỉ
mục, thì lệnh sắp xếp lại tất cả chỉ mục
REORG INDEXES
ALL là đủ để nén dữ liệu chỉ mục. Không cần thiết sắp xếp lại toàn bộ dữ
liệu của bảng bên dưới. Bạn có thể xem xét thực hiện sắp xếp lại chỉ mục, chứ không
phải sắp xếp lại toàn bộ tất cả dữ liệu bảng, chẳng hạn khi bạn đang nâng cấp từ DB2
9.5 lên DB2 10.1 và đã cho phép nén hàng rồi.
Nếu bạn không thể lấy bảng của mình trong khi không nối mạng, hãy xem xét sử dụng thủ
tục đã lưu
ADMIN_MOVE_TABLE(), cũng có sẵn kể từ bản DB2
9.7. Bạn có thể sử dụng thủ tục này để di chuyển dữ liệu đã lưu trong một bảng đang
hoạt động vào một đối tượng bảng dữ liệu mới có cùng tên, có thể cùng hoặc không
cùng ở trong một nơi lưu trữ. Thủ tục
ADMIN_MOVE_TABLE()
đưa ra một cách để sắp xếp lại có hiệu quả một bảng theo cùng cách như sắp xếp lại
bảng cổ điển thường làm, nhưng không yêu cầu bất kỳ thời gian ngừng hoạt động nào
— dữ liệu vẫn còn nối mạng và có thể truy cập được trong suốt thời gian di
chuyển.
Các từ điển nén mức bảng được xây dựng (hoặc xây dựng lại) bằng thủ tục
ADMIN_MOVE_TABLE() có cùng chất lượng như các từ điển được
xây dựng trong lúc sắp xếp lại bảng. Để xây dựng hoặc xây dựng lại một từ điển nén,
thủ tục
ADMIN_MOVE_TABLE() thực hiện các bước sau:
- Thu gom một mẫu Bernoulli của tất cả các hàng trong bảng.
- Xây dựng một từ điển nén mức bảng mới từ mẫu đó.
- Chèn từ điển đó vào bảng đích trước khi bắt đầu giai đoạn sao chép, vì vậy các hàng được nén khi được chèn vào bảng đích trong giai đoạn sao chép.
Ví dụ sau cho thấy cách bạn bắt đầu một hoạt động di chuyển bảng nối mạng (online) theo cách đơn giản nhất.
CALL SYSPROC.ADMIN_MOVE_TABLE('DB2INST1','ACCTCR', '','','','','','','','','MOVE')
Bạn có thể sử dụng thủ tục
ADMIN_MOVE_TABLE_UTIL() để thực
hiện kiểm soát độ mịn trên các tham số và hành vi của một hoạt động di chuyển bảng
trực tuyến, ví dụ như xác định kích cỡ mẫu được sử dụng để xây dựng từ điển. Tuy
nhiên, ngay cả khi bạn gọi hàm trong chế độ thực hiện
'MOVE' tiêu chuẩn, từ điển nén được xây dựng là tối ưu.
Không giống như sắp xếp lại bảng cổ điển, hành vi mặc định của thủ tục
ADMIN_MOVE_TABLE() là sẽ xây dựng lại từ điển. Vì chỉ sử
dụng một mẫu nhỏ ngẫu nhiên của dữ liệu bảng, nên việc xây dựng lại từ điển thường
không gây ra thêm chi phí hiệu năng nào so với không xây dựng lại từ điển.
Bạn có thể thấy thủ tục
ADMIN_MOVE_TABLE() đặc biệt có ích
khi bạn nâng cấp cơ sở dữ liệu của mình từ một bản phát hành DB2 trước đó. Bạn có
thể sử dụng thủ tục này để di chuyển các bảng giữa các vùng bảng và thay đổi các
tham số khác, chẳng hạn như các kiểu dữ liệu cột, cùng lúc.
### Quản lý tiêu dùng vùng đĩa
Việc áp dụng nén cho các bảng hiện có làm giảm số lượng các trang được cấp cho các bảng đó. Tuy nhiên, việc áp dụng nén không ảnh hưởng trực tiếp đến việc tiêu dùng vùng đĩa của DMS hoặc các vùng bảng lưu trữ tự động. Các vùng bảng đó thường có một số lượng lớn các khu vực không sử dụng có sẵn cho chúng.
Khi bạn lần đầu tiên thực hiện nén hàng và nén chỉ mục, một cách thực hành được khuyến cáo là đánh giá lại việc sử dụng các thùng chứa vùng bảng của bạn và tiên đoán tốc độ tăng trưởng dự kiến của dữ liệu của bạn. Khi đã cho phép nén, có thể giảm đáng kể việc sử dụng vùng bảng — có thể là một khoảng thời gian dài trước khi cơ sở dữ liệu của bạn phát triển đến mức để tiêu dùng vùng ban đầu được giải phóng. Do đó, bạn có thể muốn làm giảm các kích cỡ thùng chứa vùng bảng và tạo thêm vùng đĩa có sẵn cho những người dùng khác.
Để làm giảm có hiệu quả vùng sử dụng trên đĩa của một cơ sở dữ liệu, bạn phải giảm
kích cỡ của các thùng chứa vùng bảng được cơ sở dữ liệu sử dụng. Và yếu tố quan
trọng để xác định xem bạn có thể làm giảm kích cỡ của các thùng chứa vùng bảng đến
bao nhiêu là
*vạch dấu nước cao.* (Vạch dấu nước cao biểu diễn số trang được
cấp phát cao nhất trong một vùng bảng; nó là một khái niệm chỉ riêng cho DMS, khái
niệm này cũng gồm các vùng bảng lưu trữ tự động nữa).
Vạch dấu nước cao có thể tăng lên khi bạn tạo các bảng, mở rộng các bảng hiện có hoặc thực hiện sắp xếp lại bảng cổ điển mà không sử dụng một vùng bảng tạm thời. Bạn có thể làm giảm vạch dấu nước cao bằng cách xóa bỏ hoặc cắt xén bảng đang sở hữu khu vực nằm trong vạch dấu nước cao. Tuy nhiên, việc xóa bỏ, cắt xén hoặc sắp xếp lại các đối tượng khác không ảnh hưởng đến vạch dấu nước cao và chỉ dẫn đến việc tạo ra nhiều khu vực không sử dụng hơn ở dưới vạch dấu nước cao. Các khu vực không sử dụng thấp hơn vạch dấu nước cao chỉ có thể được sử dụng lại khi bạn tạo các đối tượng mới hoặc khi các đối tượng phát triển. Chỉ các khu vực không sử dụng ở trên vạch dấu nước cao mới có thể được thu hồi và được trả về cho hệ điều hành. Do đó, chìa khóa để giảm vùng sử dụng trên đĩa sẽ là hạ thấp vạch dấu nước cao và cắt bớt các thùng chứa vùng bảng. Cách bạn thực hiện nhiệm vụ này tùy thuộc vào loại vùng bảng nào bạn đang sử dụng, bản phát hành DB2 nào mà bạn đã sử dụng để tạo ra các vùng bảng và bản phát hành DB2 nào mà bạn đang sử dụng. (Các kỹ thuật để hạ thấp vạch dấu nước cao và giải phóng vùng sử dụng được trình bày trong phần Trả về vùng không sử dụng cho hệ thống tệp của bài này).
### Kiểm tra nén hàng và tránh những cạm bẫy thường gặp
Như đã đề cập, bạn có thể nhận được các thiết lập nén hiện tại cho các bảng và các
chỉ mục bằng cách truy vấn danh mục hệ thống. Trong khung nhìn SYSCAT.TABLES, hai
cột COMPRESSION và ROWCOMPMODE chứa thông tin về các thiết lập nén hiện tại cho mỗi
bảng. Cột COMPRESSION trong khung nhìn SYSCAT.INDEXES cung cấp thông tin về các
thiết lập nén cho mỗi chỉ mục. Lệnh
RUNSTATS điền thông
tin vào tất cả các cột này.
Các cột khác trong khung nhìn SYSCAT.TABLES cung cấp một cái nhìn sâu hơn về cách nén hàng thực hiện:
- Số đo quan trọng nhất được tìm thấy trong cột PCTPAGESSAVED. Số đo này cho biết bạn hiện đang tiết kiệm bao nhiêu vùng lưu trữ trong một bảng bằng nén hàng.
- Từ cột PCTROWSCOMPRESSED, bạn có thể xác định có bao nhiêu hàng trong bảng được nén.
- Cột AVGCOMPRESSEDROWSIZE đưa ra kích cỡ trung bình của tất cả các hàng đã nén. Trong hầu hết các kịch bản thực tế, tỷ lệ phần trăm của các hàng đã nén gần bằng 100%. Trong trường hợp này, kích cỡ trung bình của các hàng đã nén là giống hệt với kích cỡ hàng trung bình được duy trì trong cột AVGROWSIZE.
Nếu tỷ lệ phần trăm của các hàng đã nén trong một bảng thấp hơn đáng kể so với 100%, tình huống này có thể là do một trong một vài vấn đề phổ biến sau:
- Bảng của bạn có thể nằm trong một vùng bảng bình thường và nén có thể làm cho
kích cỡ trung bình của hàng rất ngắn. Đối với một bảng trong một vùng bảng bình
thường, kích cỡ hàng hiệu quả tối thiểu được giới hạn bởi thực tế là mỗi trang
có thể lưu giữ tối đa 255 dòng. Nếu kích cỡ hàng trung bình của bạn gần bằng
hoặc thấp hơn tỷ lệ đó, hãy xem xét chuyển đổi vùng bảng bình thường sang một
vùng bảng lớn. Để làm điều đó, hãy thực hiện câu lệnh thay đổi vùng bảng
ALTER TABLESPACEcó chỉ rõ tùy chọn là
CONVERT TO LARGE. Hoặc sử dụng thủ tục
ADMIN_MOVE_TABLE()để di chuyển bảng của bạn đến một vùng bảng lớn.
- Nếu bạn cho phép nén hàng trên một bảng hiện có với dữ liệu trong đó, thì từ
điển mức bảng được xây dựng tự động bằng ADC khi bảng phát triển. Dữ liệu hiện
có vẫn còn ở dạng không nén của nó cho đến khi bạn thực hiện sắp xếp lại bảng cổ
điển hoặc bạn sử dụng hàm
ADMIN_MOVE_TABLE().
- Khi bạn tạo một bảng có cho phép nén hàng cổ điển và bắt đầu điền vào bảng, từ điển mức bảng được xây dựng tự động khi kích cỡ bảng đạt đến ngưỡng của ADC là 2 MB. Tuy nhiên, các hàng ở ngay phần đầu của bảng vẫn không được nén. Nếu bảng của bạn chỉ có kích cỡ vài MB, khối các hàng ban đầu không được nén này có thể chiếm một phần đáng kể trong tổng số các hàng được lưu trữ trong bảng đó.
Nếu không có tình huống nào trong các tình huống trước đó xảy ra, hãy xác định xem bảng có chứa dữ liệu ngẫu nhiên không. Ví dụ, một bảng có thể có một cột CHAR FOR BIT DATA lớn hoặc cột LOB trực tiếp chứa dữ liệu nhị phân được nén theo một dạng nào đó bởi tầng ứng dụng. Trong những trường hợp như vậy, nén hàng có lẽ không thể nén dữ liệu thêm nữa và không nên cho phép nén hàng trên bảng đó.
Hãy chú ý đặc biệt khi bạn áp dụng nén hàng cho các bảng MDC (multidimensional clustering – phân cụm nhiều chiều). Kích cỡ ô và mật độ dữ liệu là những xem xét quan trọng để thiết kế vật lý các bảng MDC và đóng một vai trò quan trọng trong việc lựa chọn các chiều thích hợp. Trong một số trường hợp, các chiều phân cụm được lựa chọn sao cho các ô sử dụng một số lượng rất nhỏ các trang. Việc áp dụng nén hàng làm giảm kích cỡ của mỗi bản ghi và kích cỡ trung bình của các ô. Nếu nén hàng làm cho kích cỡ ô trung bình gần bằng hoặc nhỏ hơn kích cỡ của một khối đơn, bạn có thể không thấy mức tiết kiệm vùng lưu trữ đạt đến tiềm năng đầy đủ của chúng. Điều này là do việc cấp phát vùng lưu trữ trong các bảng MDC được thực hiện theo khối. Các khối dù chỉ được dùng một phần cũng tiêu tốn toàn bộ khu vực trên đĩa nhưng có thể chứa một phần đáng kể vùng lưu trữ chưa dùng đến. Nếu bạn biết rằng bạn sẽ sử dụng nén hàng, hãy nhớ tính đến tỷ lệ nén khi bạn thực hiện các tính toán để dự báo kích cỡ ô. Nếu bạn quyết định áp dụng nén hàng trên các bảng MDC hiện có, hãy xác nhận lại các tính toán kích cỡ ô. Bạn có thể thấy cần phân lớp một số chiều nào đó hoặc làm giảm kích cỡ của các vùng bảng của bạn.
Hãy kiểm tra để chắc rằng đã cho phép nén chỉ mục đối với tất cả các chỉ mục mà bạn
đã xem xét để nén. Chú ý đặc biệt đến các chỉ mục do hệ thống tạo ra — ví dụ
các chỉ mục được hoàn toàn tạo ra cho khóa chính và các cột duy nhất. Nếu bạn tạo
một bảng không cho phép nén hàng và sau đó sử dụng câu lệnh
ALTER TABLE để cho phép nén hàng, thì các chỉ mục hiện tại được tạo ra
trước khi cho phép nén bảng sẽ vẫn không được nén, rõ ràng bạn phải cho phép nén chỉ
mục cho những chỉ mục đó bằng cách thực hiện câu lệnh
ALTER
INDEX. Đối với những chỉ mục được cho phép nén, cột PCTPAGESSAVED cung
cấp thông tin về mức tiết kiệm không gian lưu trữ.
## Trả lại vùng không sử dụng cho hệ thống tệp
Sau khi giảm lượng vùng lưu trữ cần thiết để lưu trữ dữ liệu của một bảng bằng nén
sâu, bạn có thể muốn thay đổi kích cỡ vùng bảng nơi lưu trữ bảng đó, sao cho bất kỳ
vùng lưu trữ nào đã thu hồi có thể được sử dụng ở một nơi khác. Nếu sử dụng các vùng
bảng SMS thì bất kỳ vùng lưu trữ nào đã thu hồi sẽ được tự động trả về cho hệ thống
tệp như là một phần của quá trình sắp xếp lại bảng. Tuy nhiên, điều này không xảy ra
nếu sử dụng các vùng bảng DMS. Thay vào đó, có thể thay đổi kích cỡ các vùng bảng
DMS (và các vùng bảng lưu trữ tự động, là các vùng bảng DMS theo mặc định) bằng cách
thực hiện một câu lệnh SQL
ALTER TABLESPACE dưới dạng
thích hợp. Ví dụ, để giảm đi 200 MB từ vùng lưu trữ được cấp cho mỗi thùng chứa đang
được một vùng bảng tên là TBSP1 sử dụng, bạn sẽ thực hiện một câu lệnh
ALTER TABLESPACE giống như sau:
ALTER
TABLESPACE tbsp1 REDUCE (ALL CONTAINERS 200 M).
Bạn cũng có thể thu hồi vùng lưu trữ bằng cách bỏ đi một hoặc nhiều thùng chứa lưu trữ chứ không thay đổi lại kích cỡ của tất cả các thùng. Tuy nhiên, lượng vùng lưu trữ thực sự có thể được trả về cho hệ thống tệp để phân phối lại tùy thuộc vào vị trí của vạch dấu nước cao của vùng bảng được định cỡ lại.
### Vạch dấu nước cao ảnh hưởng đến việc cấp lại vùng lưu trữ như thế nào
Bất cứ khi nào lưu trữ một hàng dữ liệu trong một bảng, DB2 sẽ gán cho hàng đó một mã định danh bản ghi duy nhất, được gọi là một RID. Trước bản DB2 9, các RID gồm một số trang dài 3 byte và một số khe cắm dài 1 byte. Số khe cắm là một mục mảng trong một thư mục khe cắm, rồi thư mục này chứa giá trị độ lệch so với trang dữ liệu, nơi lưu trữ vật lý dữ liệu của hàng; số trang xác định chính trang dữ liệu đó. Bản DB2 9 và mới hơn có khả năng hỗ trợ các RID 4-byte và các RID 6-byte, gồm một số trang 4-byte và một số khe cắm 2-byte (các bảng lưu trữ trong một vùng bảng DMS LARGE sử dụng các RID 6-byte). Kết quả là, bây giờ bạn có thể có các trang dữ liệu chứa nhiều hơn 255 dòng (là giới hạn cũ với các RID 4-byte) và một phân vùng bảng đơn lẻ có thể tăng đến kích cỡ 2 TB khi nó sử dụng một trang 4K (và đến 16 TB khi nó sử dụng một trang 32K). Trong bản DB2 9 và mới hơn, các RID 6-byte được sử dụng theo mặc định cho bất kỳ vùng bảng lưu trữ tự động mới nào và vùng bảng DMS được tạo ra.
Các chỉ mục DB2 sử dụng các RID tương đối theo vùng bảng để tham khảo các bản ghi cơ
sở. (Một chỉ mục là một tập các con trỏ sắp xếp theo thứ tự, tham khảo các hàng
trong một bảng cơ sở). Điều này có nghĩa là mỗi khóa trong một chỉ mục trỏ tới khe
cắm
*X* trong trang *Y* trong một vùng bảng, chứ không trỏ đến khe cắm
*X* trong trang *Y* của một bảng cơ sở . Kết quả là, DB2 không thể
tự do di chuyển các khu vực trong một vùng bảng. Nếu đã làm thế, thì các RID đã lưu
trong các chỉ mục sẽ trỏ đến dữ liệu sai và mọi chỉ mục đã tham khảo dữ liệu trong
vùng bảng sẽ phải được xây dựng lại bất cứ khi nào xảy ra di chuyển.
Việc sử dụng các RID tương đối theo vùng bảng cải thiện hiệu năng vì loại bỏ được một bước bổ sung để tìm ra một trang cụ thể của một bảng nằm ở đâu trong một vùng bảng, lẽ ra phải được thực hiện bằng cách quét các trang ánh xạ khu vực của bảng đó. Bởi vì DB2 không thể thay đổi vị trí của các khu vực trong một vùng bảng, chỉ có vùng lưu trữ không sử dụng đứng sau vạch dấu nước cao mới có thể được giải phóng.
Cách bạn thực hiện hoạt động sắp xếp lại bảng không nối mạng đòi hỏi nén dữ liệu của một bảng có thể có một tác động đáng kể đến vạch dấu nước cao của một vùng bảng. Nếu bạn sử dụng một vùng bảng tạm thời để sắp xếp lại và nén dữ liệu của một bảng, phiên bản kết quả của bảng đó được xây dựng trong vùng bảng tạm thời, các trang dữ liệu của nó được sao chép qua đối tượng bảng ban đầu trong vùng bảng ban đầu và vùng lưu trữ do bảng này sử dụng được cắt bỏ. Hình 7 hiển thị một vùng bảng có chứa bốn bảng (được đặt tên TABLE_1, TABLE_2, TABLE_3 và TABLE_4) có thể trông như thế nào trước và sau khi tất cả bốn bảng trong đó đã được sắp xếp lại và nén bằng cách sử dụng một vùng bảng tạm thời.
##### Hình 7. Vạch dấu nước cao của một vùng bảng bị ảnh hưởng thế nào bởi các hoạt động sắp xếp lại bảng có sử dụng một vùng bảng tạm thời
![ Hình ảnh hiển thị vạch dấu nước cao cao hơn sau khi nén, do vùng lưu trữ chưa sử dụng bị phân tán](Figure7.gif)
Một khi dữ liệu trong tất cả bốn bảng đã được nén, có sẵn nhiều vùng lưu trữ chưa sử dụng hơn; tuy nhiên, vùng lưu trữ chưa sử dụng này bị phân tán khắp vùng bảng và vạch dấu nước cao đã không được hạ thấp thêm bất kỳ một lượng đáng kể nào.
Nếu không dùng một vùng bảng tạm thời để sắp xếp lại và nén dữ liệu của một bảng, thì phiên bản mới của bảng được tạo ra trong cùng một vùng bảng như bảng ban đầu và rốt cuộc bảng ban đầu được gỡ bỏ. Do hành vi này, trình tự theo đó các bảng được sắp xếp lại và nén, cũng như các bảng này được bố trí ở đâu trong vùng bảng (và không may là không có cách nào dễ dàng nào để xác định điều này), sẽ có một tác động rất lớn đến cách bố trí bảng trong vùng bảng và vị trí của vạch dấu nước cao của vùng bảng đó. Hình 8 cho thấy vùng bảng ban đầu của chúng tôi có chứa bốn bảng (TABLE_1, TABLE_2, TABLE_3 và TABLE_4) có thể trông như thế nào trước và sau khi tất cả bốn bảng trong đó đã được sắp xếp lại và nén (mà không sử dụng một vùng bảng tạm thời) theo thứ tự sau: TABLE_1, TABLE_2, TABLE_3 và TABLE_4.
##### Hình 8. Vạch dấu nước cao của một vùng bảng bị ảnh hưởng như thế nào bởi các hoạt động sắp xếp lại bảng mà không sử dụng một vùng bảng tạm thời
![ Biểu đồ hiển thị vạch dấu nước cao giảm](Figure8.gif)
Trong trường hợp này, chúng ta chỉ còn lại một vạch dấu nước cao cao hơn vạch dấu đã có khi chúng ta bắt đầu các hoạt động sắp xếp lại và nén. Tuy nhiên, nếu chúng ta sắp xếp lại và nén bảng TABLE_1 một lần nữa, bảng này sẽ được di chuyển đến phần đầu của vùng chưa sử dụng trong vùng bảng đó và vạch dấu nước cao sẽ được hạ thấp đáng kể. Hình 9 cho thấy vùng bảng sẽ trông như thế nào sau khi thực hiện sắp xếp lại và nén bảng TABLE_1 lần thứ hai.
##### Hình 9. Vạch dấu nước cao của một vùng bảng được hạ xuống như thế nào bằng cách thực hiện một hoạt động sắp xếp lại/nén lần thứ hai trên bảng TABLE_1
![ Biểu đồ hiển thị vạch dấu nước cao sau khi sắp xếp lại và nén lần thứ hai](Figure9.gif)
Lưu ý rằng các ví dụ trong Hình 7, 8 và 9 được dựa trên giả định rằng TABLE_1, TABLE_2, TABLE_3 và TABLE_4 đã được tạo ra và điền dữ liệu lần lượt từng bảng một và giả định rằng vùng bảng TBSP1 đã đầy kín hoàn toàn. Trong thực tế, ví dụ này là kịch bản trường hợp xấu nhất. Khi có nhiều hơn một bảng tồn tại trong một vùng bảng duy nhất, điều phổ biến hơn là các khu vực của các bảng khác nhau đan xen với nhau trong toàn bộ vùng bảng. Việc đánh giá mức phân mảnh khu vực đang tồn tại trở nên phức tạp hơn, nhưng có lẽ là ít nghiêm trọng hơn so với được mô tả trong các hình minh họa này. Vì vậy, tác động của vạch dấu nước cao thực tế đã tạo ra sẽ hầu như thấp hơn đáng kể.
Khi bạn bắt đầu bổ sung những thứ như là các đối tượng chỉ mục và các đối tượng lớn
(các LOB) vào cùng một vùng bảng, mọi việc thậm chí trở nên rối rắm hơn và thật khó
để dự báo chính xác điều gì sẽ xảy ra. Bạn có thể sử dụng lệnh
db2dart /DHWM để hiển thị bố trí khu vực cho tất cả các bảng trong một
vùng bảng và lệnh
db2dart /LHWM để diễn giải cách bố trí
này và tạo ra một tập các bước mà bạn có thể làm theo để hạ thấp vạch dấu nước cao.
Tuy nhiên, cách duy nhất để bảo đảm rằng mọi thứ được bố trí càng khít càng tốt sẽ
là xây dựng lại toàn bộ vùng bảng từ đầu bằng cách dỡ bỏ và nạp lại các bảng của nó.
Sau đó và chỉ sau đó, bạn sẽ có thể trả về tất cả các vùng lưu trữ đã thu hồi bằng
cách nén theo hệ điều hành để phân phối lại.
### Vùng lưu trữ có thể thu hồi được trong bản DB2 9.7 và mới hơn
Các vùng bảng lưu trữ tự động và DMS cố định mà bạn tạo ra trong bản DB2 9.7 hoặc mới
hơn hỗ trợ vùng lưu trữ có thể thu hồi được. Đối với những vùng bảng đó, trình quản
lý cơ sở dữ liệu có thể thay đổi vị trí vật lý của các khu vực trong các thùng chứa.
Có thể sử dụng cơ chế này, được gọi
*di chuyển khu vực,* để hợp nhất vùng
chưa sử dụng trong các thùng chứa vùng bảng tới các đầu vật lý của các thùng chứa.
Sau khi hợp nhất, vạch dấu nước cao sau đó có thể được hạ xuống và tiếp đến các
thùng chứa vùng bảng có thể được co lại đến kích cỡ nhỏ nhất có thể. Hình 10 cho
thấy một vùng bảng có thể trông như thế nào trước và sau khi sử dụng di chuyển khu
vực được để thu hồi không gian lưu trữ không sử dụng trong một vùng bảng lưu trữ tự
động.
##### Hình 10. Vạch dấu nước cao của một vùng bảng lưu trữ tự động được hạ xuống như thế nào thông qua di chuyển khu vực
![ Hình ảnh hiển thị cách hạ thấp vạch dấu nước cao của vùng bảng lưu trữ tự động thông qua dich chuyển khu vực](Figure10.gif)
Với vùng lưu trữ có thể thu hồi được, bạn có thể sử dụng câu lệnh
ALTER TABLESPACE để hạ thấp vạch dấu nước cao và thu nhỏ các thùng chứa
vùng bảng. Quá trình hạ thấp vạch dấu nước cao liên quan đến việc di chuyển khu vực
và có thể mất một ít thời gian. Sau khi vạch dấu nước cao được hạ xuống, có thể làm
giảm kích cỡ các thùng chứa bằng cách trả các khu vực chưa sử dụng trên vạch dấu
nước cao về cho hệ thống tệp.
Để xác định có thể giảm kích cỡ của vùng bảng lưu trữ tự động hoặc DMS đến bao nhiêu,
hãy thực hiện hàm bảng
MON_GET_TABLESPACE(), như hiển thị
dưới đây.
##### Liệt kê 9. Truy vấn để đánh giá sự giảm xuống của vùng lưu trữ tự động hoặc DMS
SELECT SUBSTR(TBSP_NAME, 1, 15) AS TBSP_NAME, TBSP_FREE_PAGES, TBSP_PAGE_SIZE * TBSP_FREE_PAGES / 1024 / 1024 AS TBSP_RECLAIMABLE_MB FROM TABLE(MON_GET_TABLESPACE('TBSP_USR_D_1', NULL))
Tập kết quả ví dụ mẫu sau cho biết rằng có thể giảm vùng bảng TBSP_USR_D_1 xuống khoảng 23 triệu trang, bằng với 365 MB trên đĩa.
##### Liệt kê 10. Các kết quả truy vấn
TBSP_NAME TBSP_FREE_PAGES TBSP_RECLAIMABLE_MB --------------- -------------------- -------------------- TBSP_USR_D_1 23369760 365150 1 record(s) selected.
Bạn có thể dễ dàng thu nhỏ các vùng bảng lưu trữ tự động tới định dạng cô đọng nhất
của chúng bằng cách sử dụng câu lệnh
ALTER TABLESPACE có
cụm từ
REDUCE MAX như sau:
ALTER
TABLESPACE tbsp_usr_d_1 REDUCE MAX.
Đối với các vùng bảng DMS, việc hạ thấp vạch dấu nước cao và giảm các thùng chứa là một quá trình hai bước, như sau:
ALTER TABLESPACE ts_dat_d LOWER HIGH WATER MARK; ALTER TABLESPACE ts_dat_d REDUCE (ALL CONTAINERS 100 G);
Khi bạn nâng cấp cơ sở dữ liệu của bạn từ một bản phát hành DB2 cũ hơn lên bản DB2 9.7 hoặc mới hơn, hãy xem xét việc thực hiện các bước sau đây để nhận được các lợi ích của vùng lưu trữ có thể thu hồi được:
- Tạo các vùng bảng mới cho tất cả các vùng bảng lưu trữ tự động hoặc các vùng bảng DMS của bạn.
- Cho phép nén hàng và nén chỉ mục trên các bảng.
- Sử dụng
ADMIN_MOVE_TABLE()để di chuyển các bảng của bạn từ các vùng bảng cũ sang các vùng bảng mới.
Bạn nên cho phép nén hàng và nén chỉ mục trước khi di chuyển các bảng, do đó, chúng bắt đầu được nén như một phần của quá trình di chuyển.
## Nén và tiện ích nạp (Load)
Một thay đổi đáng kể được giới thiệu trong DB2 9.5 là cách các hoạt động nạp chạy như
thế nào khi thực hiện dựa vào các bảng đã cho phép nén sâu. Trong DB2 9, nếu một từ
điển nén đã được tạo ra cho một bảng, tiện ích Load (nạp) sẽ sử dụng từ điển đó để
nén dữ liệu khi bảng đó đang được nạp. Tuy nhiên, nếu không có một từ điển nén nào,
tiện ích nạp sẽ không xây dựng một từ điển như là một phần của hoạt động nạp. Bắt
đầu với bản DB2 9.5, tiện ích nạp có thể xây dựng một từ điển nén được dùng cho bảng
đang được nạp đã được cho phép nén và thực hiện hoạt động
LOAD
REPLACE. Bắt đầu một hoạt động như vậy bằng cách thực hiện lệnh LOAD có
chỉ rõ hoặc tùy chọn
LOAD hoặc tùy chọn
REPLACE KEEPDICTIONARY hoặc tùy chọn
REPLACE RESETDICTIONARY. (Ngoài ra một hoạt động
LOAD INSERT cũng có thể dẫn đến việc tạo ra một từ điển nén nếu bảng
đang được nạp đã được cấu hình để nén và số lượng dữ liệu đưa vào đủ để khởi động
tạo từ điển tự động - ADC).
Nếu thực hiện lệnh
LOAD có chỉ rõ hoặc tùy chọn
REPLACE KEEPDICTIONARY hoặc tùy chọn
REPLACE RESETDICTIONARY và một từ điển nén không tồn tại, thì một từ
điển mới sẽ được tạo ra. Nếu tùy chọn
KEEPDICTIONARY được
sử dụng thay vào đó, số lượng dữ liệu sẽ được yêu cầu để xây dựng từ điển nén phụ
thuộc vào các chính sách của ADC. Vì vậy, một số dữ liệu sẽ được lưu trữ trong bảng
không nén. Sau khi từ điển được tạo ra, các dữ liệu còn lại được nạp sẽ được nén khi
sử dụng từ điển nén mới. Mặt khác, nếu chỉ rõ tùy chọn
RESETDICTIONARY, số lượng dữ liệu cần thiết để xây dựng từ điển không
phụ thuộc vào các chính sách của ADC và có thể xây dựng một từ điển nén sau khi nạp
chỉ một hàng.
Nếu thực hiện lệnh
LOAD có chỉ rõ hoặc tùy chọn
REPLACE KEEPDICTIONARY hoặc tùy chọn
REPLACE RESETDICTIONARY và một từ điển nén đã tồn tại, thì từ điển hiện
có hoặc sẽ được tạo lại (
RESETDICTIONARY) hoặc vẫn để
nguyên như đã có (
KEEPDICTIONARY) và dữ liệu trong bảng
sẽ được nén khi sử dụng từ điển hiện có hoặc từ điển mới.
Để tạo ra một từ điển nén mới cho một bảng đã cho phép nén có tên là EMPLOYEE trong
khi thực hiện một hoạt động nạp, bạn cần thực hiện một lệnh tương tự như sau:
LOAD FROM datafile.del OF DEL REPLACE RESETDICTIONARY INTO
employee.
Khi thực hiện lệnh này, giả sử không có từ điển nén nào tồn tại dành cho bảng EMPLOYEE thì một số ít bản ghi có trong tệp DATAFILE.DEL sẽ được nạp vào bảng EMPLOYEE không nén. Ngay sau khi nạp được 1-2 MB dữ liệu, ADC sẽ xây dựng một từ điển nén bằng cách sử dụng dữ liệu đó và các bản ghi còn lại sẽ được nén và được viết vào bảng ngay tiếp sau từ điển nén khi chúng được nạp.
## Nén các ảnh sao lưu và các tệp lưu trữ bản ghi nhật ký
Kể từ DB2 Universal Database 8 (Cơ sở dữ liệu đa năng của DB2, phiên bản 8), bạn đã
có thể nén các ảnh sao lưu của mình. Bắt đầu từ DB2 10.1, bạn cũng có thể áp dụng
nén cho cả các tệp lưu trữ bản ghi nhật ký của mình. Các chức năng này có sẵn bất kể
bạn có giấy phép cho DB2 Storage Optimization Feature hay không. (Thuật toán mặc
định, được sử dụng để nén các ảnh sao lưu và các bản ghi nhật ký đã lưu, là giống
như thuật toán được tiện ích
compress(1) của
UNIX® sử dụng).
### Nén sao lưu
Bạn có thể cho phép nén sao lưu độc lập cho từng ảnh sao lưu. Khi thực hiện hoạt động
sao lưu, hãy chỉ rõ cụm từ
COMPRESS— ví dụ:
BACKUP DATABASE TDB2 to /vol_aux/backups/
COMPRESS.
Nếu bạn sử dụng nén hàng và nén chỉ mục và bạn làm theo các hướng dẫn để giảm các kích cỡ của thùng chứa cho các vùng bảng của bạn, thì kích cỡ tổng thể của cơ sở dữ liệu của bạn có thể được giảm đáng kể. Do đó, các ảnh sao lưu của bạn sẽ tự động nhỏ hơn so với chúng đã có nếu không cho phép nén hàng và nén chỉ mục. Đồng thời, mức tiết kiệm thêm vùng lưu trữ mà bạn có thể đạt được bằng cách áp dụng nén các ảnh sao lưu có thể bị giảm đáng kể. Điều này đặc biệt đúng khi bạn có nhiều bảng sử dụng nén hàng thích ứng. Tuy nhiên, nén các ảnh sao lưu cũng có thể nén siêu dữ liệu, các LOB, các bảng danh mục và các đối tượng cơ sở dữ liệu khác mà không thể được nén bằng bất kỳ phương tiện khác nào.
Khi quyết định liệu có nén các ảnh sao lưu của bạn không, các chỉ tiêu quan trọng nhất là tốc độ sử dụng CPU và ổ đĩa trong khi đang sao lưu. Nén sao lưu có thể gây ra chi phí hoạt động đáng kể trong sử dụng CPU. Bạn nên sử dụng nén sao lưu chỉ khi quá trình sao lưu bị nghẽn cổ chai trên thiết bị vào/ra. Ví dụ, điều này có thể xảy ra nếu bạn lưu trữ các ảnh sao lưu của mình vào một ổ đĩa logic không chia vạch trên các đĩa vật lý khác nhau hoặc nếuthê bạn sao lưu vào phương tiện lưu trữ gắn qua mạng hay ở xa. Trong những trường hợp đó, bạn tăng thêm sử dụng CPU trong suốt quá trình sao lưu, nhưng mức tiết kiệm chi phí hoạt động vào/ra có thể thực sự thu hẹp cửa sổ sao lưu.
Nếu bạn lưu trữ các bản sao lưu của mình dựa trên phần mềm TSM (Tivoli® Storage Manager - Trình quản lý lưu trữ Tivoli), bạn nên sử dụng chức năng nén và loại bỏ trùng lặp (de-duplication) được xây dựng trong TSM. Logic loại bỏ trùng lặp có thể dẫn đến tiết kiệm vùng lưu trữ tổng thể tốt hơn đáng kể nếu bạn giữ lại một loạt các ảnh sao lưu mới đây.
Nếu chỉ có một số bảng của bạn sử dụng nén hàng và nén chỉ mục, thì một cách thực hành tốt là tách các bảng và các chỉ mục vào các vùng bảng khác nhau, dựa trên các thiết lập nén của chúng. Ngoài ra, hãy xem xét lấy các bản sao lưu ở mức vùng bảng chứ không phải ở mức cơ sở dữ liệu. Trong trường hợp này, bạn có thể làm hài hòa với các thiết lập nén và chỉ nén các bản sao lưu cho những vùng bảng nào có chứa các bảng và chỉ mục chưa nén.
### Nén bản ghi nhật ký lưu trữ
Nếu bạn đã cấu hình cơ sở dữ liệu của mình để lưu trữ bản ghi nhật ký, bạn có thể cho
phép nén các tệp lưu trữ bản ghi nhật ký đó thông qua các tham số cấu hình cơ sở dữ
liệu. Bạn có thể cho phép hoặc không cho phép nén kho lưu trữ bản ghi nhật ký một
cách độc lập với phương pháp lưu trữ sơ cấp hay thứ cấp và các vị trí lưu trữ tương
ứng. Nén kho lưu trữ bản ghi nhật ký yêu cầu trình quản lý cơ sở dữ liệu xử lý quá
trình lưu trữ, tức là bạn phải thiết lập phương pháp lưu trữ của mình là
DISK,
TSM hoặc
VENDOR. Ví dụ sau đây cho thấy cách thiết lập một kho lưu
trữ bản ghi nhật ký sơ cấp, dựa trên đĩa có cho phép nén:
UPDATE DB CFG FOR TDB2 USING LOGARCHMETH1 DISK:/vol_aux/archive/tdb2; UPDATE DB CFG FOR TDB2 USING LOGARCHCOMPR1 ON;
Đối với phương pháp lưu trữ thứ cấp, bạn có thể cho phép nén theo cách tương tự.
Việc nén kho lưu trữ bản ghi nhật ký, sau khi bạn cho phép nó, là hoàn toàn tự động.
Trình quản lý cơ sở dữ liệu tự động nén các khu vực bản ghi nhật ký khi được di
chuyển từ đường dẫn bản ghi nhật ký đang hoạt động đến vị trí lưu trữ. Khi lấy ra
các tệp bản ghi nhật ký, điều này có thể xảy ra trong các hoạt động
ROLLBACK và
ROLLFORWARD, trình
quản lý cơ sở dữ liệu tự động giải nén các tệp bản ghi nhật ký đã nén khi di chuyển
từ kho lưu trữ vào đường dẫn bản ghi nhật ký hoạt động hoặc tràn đầy. Trong quá
trình phục hồi, nếu trình quản lý cơ sở dữ liệu gặp phải một khu vực bản ghi nhật ký
đã nén trong đường dẫn bản ghi nhật ký hoạt động hoặc tràn đầy, thì nó sẽ tự động
giải nén khu vực đó. Điều này có thể xảy ra, chẳng hạn khi bạn lấy ra bằng thủ công
các khu vực bản ghi nhật ký từ vị trí lưu trữ vào đường dẫn bản ghi nhật ký hoạt
động hoặc tràn đầy.
Khi quyết định có nên cho phép nén các kho lưu trữ bản ghi nhật ký của bạn hay không, những điều cần xem xét cũng tương tự như đối với nén sao lưu. Hãy kiểm tra băng thông vào/ra có sẵn cho vị trí kho lưu trữ của bạn và xem đây có phải là nút cổ chai trong quá trình lưu trữ hay không.
Hãy xem xét cho phép nén nếu các kho lưu trữ bản ghi nhật ký của bạn ở trên các ổ đĩa logic từ xa hoặc các ổ đĩa logic không chia vạch trên một số đĩa vật lý. Ngoài ra, hãy xem xét việc cho phép nén nếu đang lưu trữ các bản ghi nhật ký của bạn vào một vị trí trung gian trên đĩa để sau đó chuyển vào băng từ thông qua tiện ích db2tapemgr. Trong trường hợp này, nén giúp giảm thời gian cần thiết để chuyển các bản ghi nhật ký đã lưu trữ vào băng từ.
Nếu lưu trữ vào TSM, hãy xem xét việc sử dụng các tiện ích nén dựng sẵn. Hành vi thực hiện với kho lưu trữ bản ghi nhật ký là tương tự như hành vi của các tiện ích nén trong DB2 10.1 vì đều sử dụng cùng một thuật toán. Không giống như nén sao lưu, nói chung là không có lợi ích thêm nào từ việc loại bỏ sự trùng lặp.
Khi bạn sử dụng nén hàng và nén chỉ mục, một số dữ liệu được viết vào bản ghi nhật ký giao dịch đã theo định dạng nén rồi. Vì vậy, số lượng dữ liệu đang được ghi nhật ký sẽ là ít hơn so với khi bạn thực hiện cùng hoạt động này trên các bảng không nén. Tuy nhiên, ngay cả khi bạn đang sử dụng rộng rãi nén hàng và nén chỉ mục, nói chung vẫn có khá nhiều siêu dữ liệu và các mục không nén khác trong bản ghi nhật ký giao dịch mà bạn có thể đạt được mức tiết kiệm vùng lưu trữ đáng kể đối với hầu như bất kỳ kho lưu trữ bản ghi nhật ký nào.
## Lời cảm ơn
Các tác giả muốn cảm ơn Bill Minor về đóng góp của ông cho bài này.
## Tài nguyên
### Học tập
- Biết thêm các chi tiết trong bài "
[Các cách thực hành tốt nhất: tối ưu hóa lưu trữ bằng nén sâu](http://www.ibm.com/developerworks/data/bestpractices/deepcompression/index.html?S_TACT=105AGY75)."
- Nhận một tổng quan về những thay đổi với DB2 10
trong bài "
[Có gì mới trong DB2 10 cho Linux, UNIX và Windows](http://www.ibm.com/developerworks/data/library/techarticle/dm-1204whatsnewdb210/index.html?S_TACT=105AGY75)."
- Tìm hiểu thêm về việc cải thiện hiệu năng trong DB2
10 trong bài "
[Các nâng cấp hiệu năng truy vấn của DB2 v10.1](http://www.ibm.com/developerworks/vn/library/12/dm-1205db210performance/)."
- Đọc bài "
[Thử kiểm tra DB2 v10.1 khi dùng một thiết bị ảo](http://www.ibm.com/developerworks/data/library/techarticle/dm-1205testdrivedb2/index.html?S_TACT=105AGY75)" để tìm hiểu thêm về các tính năng của DB2 10.
- Tìm hiểu thêm về Quản lý thông tin tại
[Vùng quản lý thông tin trên developerWorks](http://www.ibm.com/developerworks/data/?S_TACT=105AGY75). Tìm tài liệu kỹ thuật, các bài hướng dẫn, kiến thức, các bản tải về, thông tin sản phẩm và nhiều hơn nữa.
- Theo sát với
[các sự kiện kỹ thuật và webcast trên developerWorks](http://www.ibm.com/developerworks/offers/techbriefings/?S_TACT=105AGY75).
- Theo dõi
[developerWorks trên Twitter](http://www.twitter.com/developerworks/).
### Lấy sản phẩm và công nghệ
- Xây dựng dự án phát triển
tiếp theo của bạn với
[phần mềm dùng thử IBM](http://www.ibm.com/developerworks/downloads/?S_TACT=105AGY75), có sẵn để tải trực tiếp từ developerWorks.
- Bây giờ bạn có thể sử dụng
DB2 miễn phí. Hãy tải về
[DB2 Express-C](http://www.ibm.com/developerworks/downloads/im/udbexp/index.html?S_TACT=105AGY75), một phiên bản DB2 Express Edition cho cộng đồng miễn phí cung cấp các tính năng dữ liệu cốt lõi giống như DB2 Express Edition và cung cấp một cơ sở vững chắc để xây dựng và triển khai các ứng dụng.
### Thảo luận
- Xem
[các blog developerWorks](http://www.ibm.com/developerworks/blogs/)và dành tâm trí cho [cộng đồng developerWorks](http://www.ibm.com/developerworks/community?S_TACT=105AGY75).
## Bình luận
[Vùng dữ liệu trên developerWorks](http://www.ibm.com/developerworks/vn/views/data/libraryview.jsp)
Khám phá các bài viết xoay quanh lĩnh vực dữ liệu, Quản lý hệ thống thông tin
[Vùng mã nguồn mở trên developerWorks](http://www.ibm.com/developerworks/vn/views/opensource/libraryview.jsp)
Xem các bài viết về HTML, CSS, JavaScript,...
[Điện toán đám mây](http://www.ibm.com/developerworks/vn/views/cloud/libraryview.jsp)
Tìm hiểu về điện toán đám mây

Content-Language: en-US


markdown:
There are many ways to contribute. Cash donations, of course, always are needed, and welcome, to help pay for document acquisition and difficult translation projects. However, many of us cannot make cash donations. If you can’t make a cash donation, you can help in other ways.
These are only a few ways you can contribute to Ukraine SIG. There are many more. We can tailor your task to the amount of time you have available. If you can help, please contact me directly, or contact any of our Board members.
And, please, don’t forget to fill out our short Survey. It will take you less than 5 minutes. Even if you don't think you "qualify" as a volunteer, please fill out the survey.
I am looking forward to hearing from you and to working with you.
Ron
Ronald D. Doctor (rddpdx@gmail.com)
Coordinator, JewishGen Ukraine SIG
where Jewish genealogy is personal

WARC-Type: response

Content-Type: application/http; msgtype=response

Cache-Control: private

Content-Type: text/html

Connection: close


markdown:
Reference: When these letters appear the town has Town Leader, KehilaLinks, Projects, Documents
<< Previous - Next >>
Important Note:A town can be named in different ways (in Yiddish, in Russian, in Polish, in Ukrainian...), Many town names have changed over time and many can be spelled differently depending on the transliteration rules applied. Ukraine SIG has chosen as the main town name the official one around 1900. Town names in this time period are the ones that are most widely known among Jewish genealogy researchers. The 1900s-era town names are consistent with the clickable maps of 1910 that we feature on our website. In addition, we use Alexander Beider's system for transliterating town names (except for some special very know cases where a different English name is widely know like Moscow or Kiev).
This town list shows only 1900 town names, not modern names. However, the Ukraine SIG database stores most of the alternate names and you can search for them (using D-M soundex) through the town search box on the top-right of each website page. The town page will show all alternate names as well as the different names by period (1900, 1930, 1950, modern).


markdown:
# Vẻ đẹp dịu dàng của hoa văn trong giấy dán tườngNhững đường nét đơn giản, nhẹ nhàng cùng màu sắc tươi vui, rực rỡ giúp từng góc nhỏ trong không gian đẹp nhà bạn trở nên đẹp hơn, quen hơn và cũng lạ hơn...
Sự kết hợp giữa màu sắc, ánh sáng cùng những đường nét mềm mại của hoa văn góp phần để lại dấu ấn nhẹ nhàng trong cảm nhận của mỗi vị khách khi đến nhà.
![da hoa cuong, nhom kinh, giay dan tuong, tran thach cao,do go noi that Vẻ đẹp dịu dàng của hoa văn trong décor nhà](/upload/images/2011/03/0703/0-giay-dan-tuong-1.jpg)
[gồm hai màu khá "bắt sáng" là xanh lá và vàng nhạt cùng những đường cong mềm mại của dây hoa trắng khiến bầu không khí trong phòng khách trở nên tươi tắn hơn.](http://www.khaidat.com.vn/danh-muc/giay-dan-tuong-8) **giấy dán tường** ![da hoa cuong, nhom kinh, giay dan tuong, tran thach cao,do go noi that Vẻ đẹp dịu dàng của hoa văn trong décor nhà](/upload/images/2011/03/0703/0-giay-dan-tuong-2.jpg)
**giấy dán tường,**của nến và của khung tủ quần áo... ![da hoa cuong, nhom kinh, giay dan tuong, tran thach cao,do go noi that Vẻ đẹp dịu dàng của hoa văn trong décor nhà](/upload/images/2011/03/0703/0-giay-dan-tuong-3.jpg)
**giấy dán tường**in mẫu hoa văn nhỏ với màu sắc đơn giản - đen và trắng tạo ra không gian giản dị bởi màu sắc nhưng lại phong phú bởi cách kết hợp của nhiều hoa văn trong phòng. ![da hoa cuong, nhom kinh, giay dan tuong, tran thach cao,do go noi that Vẻ đẹp dịu dàng của hoa văn trong décor nhà](/upload/images/2011/03/0703/0-giay-dan-tuong-4.jpg)
**giấy dán tường**màu trắng sinh động. ![da hoa cuong, nhom kinh, giay dan tuong, tran thach cao,do go noi that Vẻ đẹp dịu dàng của hoa văn trong décor nhà](/upload/images/2011/03/0703/0-giay-dan-tuong-5.jpg)
![da hoa cuong, nhom kinh, giay dan tuong, tran thach cao,do go noi that Vẻ đẹp dịu dàng của hoa văn trong décor nhà](/upload/images/2011/03/0703/0-giay-dan-tuong-6.jpg)
**giấy dán tường**, kết hợp giữa không gian đóng và mở của tủ và trang trí nhẹ nhàng bằng những mẫu in hoa văn phía dưới là bạn đã có được một sản phẩm đẹp và sáng tạo. ![da hoa cuong, nhom kinh, giay dan tuong, tran thach cao,do go noi that Vẻ đẹp dịu dàng của hoa văn trong décor nhà](/upload/images/2011/03/0703/0-giay-dan-tuong-7.jpg)
[hoa văn như là điểm nhấn đơn giản và tinh tế cho ngôi nhà, bạn nên chọn những nơi phù hợp nhất để làm bật lên vẻ đẹp thanh lịch không kém ngọt ngào của bất cứ căn phòng nào trong nhà. Những họa tiết hoa văn màu tím nhạt trên cửa vào phòng ăn như tạo sự kết nối đơn giản và bình dị cho căn phòng.](http://www.khaidat.com.vn/danh-muc/noi-that-dep-70) **Trang trí nội thất** ![da hoa cuong, nhom kinh, giay dan tuong, tran thach cao,do go noi that Vẻ đẹp dịu dàng của hoa văn trong décor nhà](/upload/images/2011/03/0703/0-giay-dan-tuong-8.jpg)
![da hoa cuong, nhom kinh, giay dan tuong, tran thach cao,do go noi that Vẻ đẹp dịu dàng của hoa văn trong décor nhà](/upload/images/2011/03/0703/0-giay-dan-tuong-9.jpg)
![da hoa cuong, nhom kinh, giay dan tuong, tran thach cao,do go noi that Vẻ đẹp dịu dàng của hoa văn trong décor nhà](/upload/images/2011/03/0703/0-giay-dan-tuong-10.jpg)
![da hoa cuong, nhom kinh, giay dan tuong, tran thach cao,do go noi that Vẻ đẹp dịu dàng của hoa văn trong décor nhà](/upload/images/2011/03/0703/0-giay-dan-tuong-11.jpg)
**trang trí nội thất**nhà cửa không chỉ tạo sự "va chạm" nhẹ đầy thú vị của màu sắc mà còn tạo vẻ đẹp sinh động và trẻ trung cho căn phòng.
### Khác
[Đặc & rỗng - ngoài & trong](http://www.khaidat.com.vn/dac-amp-rong-ngoai-amp-trong-940) [Ngôi nhà được trang trí nội thất với nhiều màu sắc](http://www.khaidat.com.vn/ngoi-nha-duoc-trang-tri-noi-that-voi-nhieu-mau-sac-934) [Vẻ đẹp của họa tiết sọc trong trang trí nội thất nhà](http://www.khaidat.com.vn/ve-dep-cua-hoa-tiet-soc-trong-trang-tri-noi-that-nha-927) [Bí quyết cho không gian đẹp cho bếp](http://www.khaidat.com.vn/bi-quyet-cho-khong-gian-dep-cho-bep-919) [Biệt thự trong phố](http://www.khaidat.com.vn/biet-thu-trong-pho-917) [Thắp sáng phòng khách của ngôi nhà phố hay biệt thự bằng màu sắc](http://www.khaidat.com.vn/thap-sang-phong-khach-cua-ngoi-nha-pho-hay-biet-thu-bang-mau-sac-912) [Nhà xinh với phụ kiện trang trí nội thất đơn giản](http://www.khaidat.com.vn/nha-xinh-voi-phu-kien-trang-tri-noi-that-don-gian-908) [Penthouse "cổ" có giá 3,2 triệu USD](http://www.khaidat.com.vn/penthouse-quotcoquot-co-gia-32-trieu-usd-850) [Những góc lãng mạn bên ngoài ngôi nhà](http://www.khaidat.com.vn/nhung-goc-lang-man-ben-ngoai-ngoi-nha-845) [Chọn bình cắm hoa đẹp cho ngày 8/3](http://www.khaidat.com.vn/chon-binh-cam-hoa-dep-cho-ngay-83-795)

WARC-Truncated: length

Server: Apache/2.2.24 (Unix) mod_ssl/2.2.24 OpenSSL/1.0.0-fips mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635


markdown:
Your browser does not support javascript or javascript is turn off.
Please turn on javascript and
try again
Liên hệ
FAQ
Login
Sign Up
Danh bạ Doanh nghiệp
Form mẫu tiếng Việt
Form mẫu tiếng Anh
Video thủ thuật
Advanced search
Afghanistan
Albania
Algeria
Angola
Argentina
Armenia
Australia
Austria
Azerbaijan
Bahamas
Bahrain
Bangladesh
Belarus
Belgium
Belize
Benin
Bhutan
Boaco
Bolivia
Bosnia and Herzegovina
Botswana
Brazil
Brunei Darussalam
Bulgaria
Burundi
Cambodia
Cameroon
Canada
Cape Verde
Carazo
Central African Republic
Chile
China, People's Republic of
Chinandega
Colombia
Congo
Congo, Democratic Republic of the
Costa Rica
Croatia
Cuba
Cyprus
Czech Republic
Denmark
Djibouti
Domenican Republic
Ecuador
Egypt
El Salvador
Equatorial Guinea
Eritrea
Estelí
Estonia, Counties of
Ethiopia
Fiji
Finland
France
Gabon
Gambia
Georgia
Germany
Ghana
Granada
Greece
Guatemala
Guinea
Guinea-Bissau
Guyana
Haiti
Honduras
Hungary
Iceland
India
Indonesia
Ireland
Israel
Italy
Japan
Jinotega
Jordan
Kazakhstan
Kenya
Kiribati
Korea,Democratic People's Republic of (North Korea)
Korea,Republic of (South Korea)
Kuwait
Kyrgyzstan
Laos People's Democratic Republic
Liberia
Lithuania
Luxembourg
Malaysia
Mauritius
Mexico
Micronesia, Federated States of
Moldova, Republic of
Nepal
Netherlands
New Zealand
Nicaragua
Nigeria
Norway
Pakistan
Panama
Paraguay
Peru
Poland
Portugal
Provinces of Iran
Romania
Russian Federation
Saudi Arabia
South Africa
Spain
Sri Lanka
Swaziland
Sweden
Switzerland, Cantons of
Syrian Arab Republic
Taiwan
Tajikistan
Tanzania
Thailand
Timor-Leste
Togo
Tunisia
Turkey
Turkmenistan
Uganda
Ukraine
United Arab Emirates
United Kingdom
United States
Uruguay
Uzbekistan
Venezuela
Vietnam
Yemen
Yugoslavia
Zambia
Zimbabwe
Advanced search
--- All ---
Hồ Chí Minh
An Giang
Bà Rịa - Vũng Tàu
Bạc Liêu
Bắc Cạn
Bắc Giang
Bắc Ninh
Bến Tre
Bình Dương
Bình Định
Bình Phước
Bình Thuận
Cà Mau
Cao Bằng
Cần Thơ
Đà Nẵng
Đắk Lắk
Đắk Nông
Đồng Nai
Đồng Tháp
Gia Lai
Hà Giang
Hà Nam
Hà Nội
Hà Tây
Hà Tĩnh
Hải Dương
Hải Phòng
Hậu Giang
Hoà Bình
Hưng Yên
Khánh Hoà
Kiên Giang
Kon Tum
Lai Châu
Lạng Sơn
Lào Cai
Lâm Đồng
Long An
Nam Định
Nghệ An
Ninh Bình
Ninh Thuận
Phú Thọ
Phú Yên
Quảng Bình
Quảng Nam
Quảng Ngãi
Quảng Ninh
Quảng Trị
Sóc Trăng
Sơn La
Tây Ninh
Thái Bình
Thái Nguyên
Thanh Hoá
Thừa Thiên - Huế
Tiền Giang
Trà Vinh
Tuyên Quang
Vĩnh Long
Vĩnh Phúc
Yên Bái
All
Tại sao là chúng tôi?
Danh bạ Doanh nghiệp
An toàn & Bảo hộ lao động
(2163)
Âm thanh - Ánh sáng
(10040)
Bảo vệ - Thám tử
(439)
Bệnh viện - Phòng khám - Dụng cụ y tế
(15205)
Bưu chính - Viễn thông
(8514)
Cao su - SP & Thiết bị
(1646)
Cơ khí - Cơ điện - SP & Thiết bị
(11029)
Công chứng - Dịch thuật
(411)
Công cụ dụng cụ
(5014)
Da - SP & Thiết bị
(491)
Dệt may - SP & thiết bị
(10619)
Dịch vụ
(15826)
Đầu tư - Thương mại
(20032)
Đồ chơi
(851)
Đồ gỗ - SP & Thiết bị
(7143)
Đồ gia dụng
(3708)
Điện tử, vi tính - SP, Linh kiện & Thiết bị
(14803)
Giáo dục - Đào tạo & Tư vấn
(23511)
Giấy & Bao bì
(5906)
In ấn & Xuất bản
(5865)
Hóa chất
(8093)
Hoa - Cây cảnh - Thú cảnh
(1887)
Khoáng sản - Kim loại - Nguyên liệu
(10368)
Khu công nghiệp
(951)
Luật sư - Tư vấn
(15636)
Môi trường - Vệ sinh
(1820)
Năng lượng - Nhiên liệu
(6260)
Nông nghiệp - Lâm nghiệp
(12510)
Nhựa & Các sản phẩm
(5287)
Nội - Ngoại thất
(6027)
Ô tô - Phụ tùng, phụ kiện
(3398)
Quảng cáo - Tiếp thị
(4664)
Sản phẩm thời trang
(5968)
Siêu thị, chợ
(3948)
Sức khỏe & Làm đẹp
(10336)
Tài chánh - Chứng khoán
(1648)
Thể thao & Giải trí
(29055)
Thủ công mỹ nghệ - Trang trí
(3943)
Thực phẩm & Nước giải khát
(19413)
Vận tải
(15337)
Vật liệu xây dựng - Vật liệu các loại
(25472)
Văn phòng phẩm - Thiết bị & Đồ dùng học tập
(4937)
Xây dựng & Địa ốc
(30389)
Tổ chức - Đoàn thể
(42743)
Tổng hợp
(87361)
Dịch vụ & Giải pháp
Hãy chọn DV Hỗ trợ khởi nghiệp
THEO TỪNG NHU CẦU RIÊNG
Xây dựng DN số
Website - eMarketing
Đăng ký kinh doanh
Báo cáo thuế
Văn phòng giao dịch
X
e hơi cho thuê
DIV TẠO KHOẢNG CÁCH
Danh bạ Doanh nghiệp
Khu công nghiệp
Khu công nghiệp
Ban Quản Lý Các Khu Công Nghiệp Tỉnh Phú Thọ
Click here to show the photo slider, or click on an image above to view it.
Address:
Trần Phú, Tân Dân, Tp. Việt Trì, Phú Thọ
Email:
Website:
Detail Informations
Comments
» Send your comments
Name
Email
Message
Please enter your message here...
Letters are not case-sensitive.
Other items:
Đăng tin »
Posts/page
15
30
45
60
75
Page
«
1
...
59
60
61
62
63
64
»
Cty Á Nguyên TNHH Thương Mại
Address:
7 Đường C18, P. 12, Q. Tân Bình, Tp. Hồ Chí Minh
Email:
Read more »
TAM CƯỜNG - CTY TNHH TAM CƯỜNG
Address:
99 HOÀNG QUỐC VIỆT, Q.CẦU GIẤY, TP. HÀ NỘI
Read more »
Cty An Hữu TNHH
Address:
563 Lý Thường Kiệt, P. 8, Q. Tân Bình, Tp. Hồ Chí Minh
Email:
Website:
Read more »
Cty Elegant Team Manufacturer TNHH
Address:
Khu Công Nghiệp Quế Võ, Lô I203-I204, X. Phượng Mao, H. Quế Võ, Bắc Ninh
Read more »
Ban Quản Lý Các Khu Công Nghiệp Tỉnh Hưng Yên
Address:
Khu Công Nghiệp Phố Nối, TT. Bản Yến Nhân, H. Mỹ Hảo, Hưng Yên
Email:
Read more »
Ban Quản Lý Các Khu Công Nghiệp Tỉnh Bình Thuận
Address:
119 Trần Hưng Đạo, Tp. Phan Thiết, Bình Thuận
Email:
Website:
Read more »
Cty Á Phi Long TNHH Thương Mại & Dịch Vụ
Address:
Tầng 10, Tòa Nhà Pacific Place, 83B Lý Thường Kiệt, P. Trần Hưng Đạo, Q. Hoàn Kiếm, Hà Nội
Email:
Website:
Read more »
BQL CÁC KCN TỈNH BÌNH PHƯỚC
Address:
QL14, P.TÂN PHÚ, TX.ĐỒNG XOÀI, BÌNH PHƯỚC
Read more »
BẢO LONG - CTY TNHH TMDV BẢO LONG
Address:
KCN NAM THĂNG LONG, X.THỤY PHƯƠNG, H.TỪ LIÊM, TP. HÀ NỘI
Read more »
Ban Quản Lý Các Khu Công Nghiệp Tỉnh Phú Thọ
Address:
Trần Phú, Tân Dân, Tp. Việt Trì, Phú Thọ
Email:
Website:
Read more »
Cơ Sở Anh Vũ
Address:
558 Hoàng Văn Thụ, P. 4, Q. Tân Bình, Tp. Hồ Chí Minh
Read more »
XN ĐẠI LÝ VẬN TẢI TMDV TỔNG HỢP
Address:
98L LÊ LAI, P.BT, Q.1, TP. HCM
Email:
Website:
Read more »
Ban Quản Lý Các Khu Công Nghiệp Tỉnh Đăk Lăk
Address:
7 Trường Chinh, Tp. Buôn Ma Thuột, Đắc Lắc
Read more »
TT CÔNG NGHỆ MỚI KHOÁNG SẢN & TIN HỌC
Address:
KCN NAM THĂNG LONG, X.THỤY PHƯƠNG, H.TỪ LIÊM, TP. HÀ NỘI
Read more »
ALLANTE - NHÀ HÀNG ALLANTE
Address:
KM3 PHAN TRỌNG TUỆ, X.TAM HIỆP, H.THANH TRÌ, TP. HÀ NỘI
Email:
Website:
Read more »
Posts/page
15
30
45
60
75
Page
«
1
...
59
60
61
62
63
64
»
Advertisement
Follow us on:
VKTh0207.

Content-Type: text/html; charset=utf-8

Powered-By: Smartit Web7Mau


markdown:
**UỶ BAN NHÂN DÂN CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM** **TỈNH LẠNG SƠN Độc lập - Tự do - Hạnh phúc**
Số: 2134/QĐ-UBND
*Lạng Sơn, ngày 23 tháng 10 năm 2009* **** **** **** **QUYẾT ĐỊNH** **Phê duyệt kết quả lựa chọn nhà thầu xây lắp gói thầu:** **Xây dựng 04 điểm trường huyện Lộc Bình.** **** **CHỦ TỊCH UỶ BAN NHÂN DÂN TỈNH** ****
Căn cứ Luật Tổ chức HĐND và UBND ngày 26/11/2003;
Căn cứ Luật Đấu thầu ngày 29/11/2005;
Căn cứ Nghị định số 58/2008/NĐ-CP ngày 05/5/2008 của Chính phủ về hướng dẫn thi hành Luật Đấu thầu và lựa chọn nhà thầu theo Luật Xây dựng;
Xét đề nghị của Giám đốc Sở Kế hoạch và Đầu tư tại Báo cáo thẩm định kết quả lựa chọn nhà thầu số 467/BC-SKHĐT ngày 19/10/2009,
**QUYẾT ĐỊNH** **:** **Điều 1.**Phê duyệt kết quả lựa chọn nhà thầu gói thầu: Xây dựng 04 điểm trường huyện Lộc Bình, với nội dung như sau:
1- Đơn vị trúng thầu: Công ty TNHH Thái Sơn.
2- Giá trúng thầu: 1.713.749.000 đồng.
3- Hình thức hợp đồng: Hợp đồng theo đơn gía.
4- Thời gian thực hiện hợp đồng: 90 ngày.
**Điều 2.**Chủ đầu tư có trách nhiệm thông báo kết quả trúng thầu, kèm theo dự thảo hợp đồng xây lắp tới Nhà thầu có tên trên và thực hiện quản lý đầu tư và xây dựng theo quy định hiện hành. **Điều 3.**Chánh Văn phòng UBND tỉnh, Giám đốc các Sở: Kế hoạch và Đầu tư, Tài chính, Giáo dục và Đào tạo; Giám đốc Kho bạc Nhà nước tỉnh, Chủ tịch UBND huyện Lộc Bình chịu trách nhiệm thi hành Quyết định này./.
|
||
||
|KT. CHỦ TỊCH
|
|Nơi nhận : 21b |
||
|PHÓ CHỦ TỊCH
|
|
- Như điều 3;
- CT, PCT UBND tỉnh;
- PVP, TH, VX, NĐ;
|
||
|
|
|
- Lưu VT.TQT
|
||
|
|
||
||
|
|
||
||
|
|
||
||
|Hứa Hạnh

Server: Apache/2.2.3 (CentOS)

Set-Cookie: SESSf0d370c7c1ae9b1a446eaac6ecf9358e=o8pg6t2fftsq7mcb9n7p1a8kc5; expires=Sat, 21-Feb-2015 19:52:00 GMT; path=/; domain=www.langson.gov.vn

Cache-Control: post-check=0, pre-check=0


markdown:
### Liên hệ chúng tôi
**Thông Tin Thị Thực** **Thông tin bổ sung:**
Bạn có thể tìm thấy thông tin chi tiết về các yêu cầu thị thực bằng việc
[nhấn vào đây](/vi/thong-tin-thi-thuc-du-hoc). Hầu hết khách hàng của chúng tôi không yêu cầu thị thực tới điểm đến là trường ngoại ngữ của họ. Trong trường hợp bạn cần xin thị thực để tham dự khóa học ngoại ngữ của mình, trường học sẽ rất sẵn lòng cung cấp bất cứ tài liệu nào mà bạn yêu cầu trong quá trình xin thị thực sau khi bạn đã đăng ký đặt chỗ với trường. Gặp bất cứ vấn đề nào liên quan đến thị thực, bạn nên liên hệ trực tiếp đại sứ quán của nước mà bạn sẽ tới. Tóm lại, đại sứ quán hay tổng lãnh sự sẽ hướng dẫn đầy đủ cách thức trong việc xin thị thực của bạn và không yêu cầu đóng thêm phí. Tuy nhiên, ở hầu hết các quốc gia, có nhiều công ty chuyên nghiệp về dịch vụ hỗ trợ xin thị thực như globalvisas.com. Mong bạn hiểu rằng chúng tôi không hỗ trợ xin thị thực trực tiếp và bạn cần liên hệ với đại sứ quán/tổng lãnh sự trực tiếp nếu có thắc mắc. **Làm việc với vai trò là giáo viên dạy ngoại ngữ:**
Nếu bạn quan tâm đến khóa đào tạo giảng viên để chuẩn bị làm việc với vai trò giáo viên dạy ngoại ngữ, chúng tôi rất sẵn lòng hỗ trợ bạn trong việc tìm kiếm một khóa học thích hợp. Nếu bạn đang tìm công việc là giáo viên, xin lưu ý chúng tôi điều hành dịch vụ đăng ký đặt chỗ cho các khóa học ngoại ngữ và không cung cấp bất cứ công việc giảng dạy nào.
**Cung cấp dịch vụ nơi ở:**
Chúng tôi chỉ giới thiệu các dịch vụ ăn ở được các trường đối tác cung cấp. Do vậy, không may là chúng tôi không thể giải quyết những yêu cầu của những nhà cung cấp dịch vụ nơi ở từ bên thứ ba bất kỳ.
**Điện thoại (hỗ trợ đa ngôn ngữ)** __English:__ **US**: +1-646 503 18 10 **UK**: +44-203 355 53 40 **Canada**: +1-800 713 71 35 (toll-free number) **Israel**: +97-225 69 51 89 **Ireland**: +35-316 91 75 25 **South Africa**: +27-213 00 80 85 **Wordlwide**: +34-93 268 87 74 __Español:__ **España**: +34-93 268 87 74 **Mexico**: +52-554 17 08 348 **Argentina**: +54-115 19 905 14 **Chile**: +56-228 999 396 **Colombia**: +57-289 128 16 **Venezuela**: +58-212 72 025 06 __Français:__ **France**: +33-1-78416974 **Suisse**: +41-225 180 700 **Canada**: +1-800 613 63 45 (numéro gratuit) __Deutsch:__ **Deutschland**: +49-221-8000 94 29 **Österreich**: +43-720116182 **Schweiz**: +41-435083934 **Nederland**: +31-858880253 __русский:__ **Россия**: +7-4996092862 **Польша**: +48-222 09 89 53 __Svenska:__ **Sverige**: +46-844 68 36 76 **Norge**: +7-219 30 570 **Danmark**: +46-844 68 36 76 __Italiano:__+39-02-94751194 __日本語:__+34-93 268 87 74 __Magyar:__+36-180 88 317 __Català:__+34-93 268 87 74 __Português:__ **Brasil**: +55 213 002 03 31 __ภาษาไทย:__ **ไทย**: +66 600 035 689
Thứ Hai-Thứ Năm: 9.30-13.30h / 14.45-18.45h
**Customer Support Hours (international support office)**
Thứ Sáu: 9.00-13.00h / 13.30-16.30h CET (Central European Time)

Content-Encoding: gzip

Vary: Accept-Encoding