text:
Trước khi bạn bắt đầu
Về loạt bài hướng dẫn này
Nếu bạn đang chuẩn bị dự kỳ thi 731 lấy chứng chỉ quản trị cơ sở dữ liệu (DBA) DB2, bạn đã đến đúng chỗ - đây là một kiểu phòng tự học. Loạt bảy bài hướng dẫn chuẩn bị lấy chứng chỉ DB2 này gồm các khái niệm chính mà bạn cần biết để làm bài kiểm tra. Hãy làm bài tập ở nhà của bạn ở đây và giảm bớt căng thẳng trong ngày thi.
Về bài hướng dẫn này
Việc tinh chỉnh và định cấu hình cho cơ sở dữ liệu DB2 có thể là một quá trình phức tạp, đôi khi là rất khó cho các quản trị viên cơ sở dữ liệu mới vào nghề. Tuy nhiên, có một số lượng lớn các công cụ, các hàm và các ứng dụng đi kèm với DB2 mà một khi ta làm chủ được chúng, thì nhiệm vụ này trở nên đơn giản
Hướng dẫn này được thiết kế để giới thiệu cho bạn một bộ các công cụ giám sát sẵn có tại DB2 9 và chỉ cho các bạn cách sử dụng mỗi công cụ để giám sát xem hệ thống cơ sở dữ liệu của bạn hoạt động tốt (hoặc kém) như thế nào. Trong hướng dẫn này, bạn sẽ tìm hiểu xem:
- Cách trình giám sát của hệ thống cơ sở dữ liệu làm việc như thế nào
- Cách thu thập các thông tin chụp nhanh (snapshot) như thế nào
- Cách tạo ra các trình giám sát sự kiện và dữ liệu giám sát sự kiện được thu thập như thế nào
- Cách sử dụng trình giám sát tình trạng sức khỏe máy tính và Trung tâm sức khỏe máy tính (Health Center) như thế nào
- Các dữ liệu giải nghĩa toàn diện và dữ liệu chụp nhanh giải nghĩa khác nhau như thế nào
- Các dữ liệu giải nghĩa toàn diện và dữ liệu chụp nhanh giải nghĩa được thu thập như thế nào
- Cách sử dụng công cụ Giải nghĩa trực quan (Visual Explain) để xem giải nghĩa về dữ liệu chụp nhanh
Đây là hướng dẫn thứ tư trong loạt bảy bài hướng dẫn để giúp bạn chuẩn bị kỳ thi lấy chứng chỉ Quản trị cơ sở dữ liệu DB2 9 cho Linux, UNIX và Windows (Kỳ thi 731). Các tư liệu trong hướng dẫn này chủ yếu dành cho các mục tiêu trong phần 4 của kỳ thi, có tên "Phân tích hoạt động của DB2." Bạn có thể xem các mục tiêu này tại địa chỉ: http://www-03.ibm.com/certify/tests/obj731.shtml.
Mục đích của bài hướng dẫn
Sau khi hoàn thành hướng dẫn này, bạn sẽ có thể:
- Thu giữ các hình chụp nhanh bằng cách sử dụng hàm
GET SNAPSHOThoặc các hàm SQL
- Tạo và kích hoạt trình giám sát sự kiện
- Định cấu hình trình giám sát tình trạng sức khỏe bằng cách sử dụng Trung tâm sức khỏe máy tính (Health Center)
- Thu giữ và phân tích các thông tin giải nghĩa / Giải nghĩa trực quan
- Nhận biết các hàm của công cụ xác định vấn đề của DB2 (ví dụ: db2pd và db2mtrk)
Các yêu cầu cần có
Để được tham dự được kỳ thi DBA DB2 9 thì bạn đã phải vượt qua kỳ thi 730, Cơ bản về DB2 9. Chúng tôi khuyên bạn nên xem loại bài hướng dẫn: Cơ bản về DB2 trước khi bắt đầu loạt bài hướng dẫn này.
Để giúp bạn hiểu một số tư liệu được trình bày trong hướng dẫn này, bạn phải biết các thuật ngữ sau:
- Ngôn ngữ truy vấn có cấu trúc (SQL): Một ngôn ngữ được tiêu chuẩn hoá dùng để định nghĩa các đối tượng và thao tác dữ liệu trong một cơ sở dữ liệu quan hệ.
- Trình tối ưu hóa DB2: Một thành phần của trình tiền biên dịch SQL, Trình tối ưu hoá chọn kế hoạch truy cập cho câu lệnh SQL dùng ngôn ngữ thao tác dữ liệu bằng cách mô hình hóa các chi phí thực hiện của một số kế hoạch truy cập có thể và chọn ra kế hoạch có chi phí ước tính tối thiểu.
Yêu cầu về hệ thống
Bạn không cần một bản sao của DB2 để hoàn thành hướng dẫn này. Tuy nhiên, bạn sẽ học được nhiều hơn từ hướng dẫn này, nếu bạn tải về phiên bản dùng thử miễn phí DB2 9 của IBM để làm theo bài hướng dẫn này.
Thu giữ dữ liệu chụp nhanh
Trình giám sát hệ thống cơ sở dữ liệu
Giám sát cơ sở dữ liệu là một hoạt động sống còn, hoạt động này, khi được thực hiện thường xuyên, sẽ cung cấp các thông tin phản hồi liên tục về tình trạng sức khỏe của một hệ thống cơ sở dữ liệu. Bởi vì giám sát cơ sở dữ liệu là một phần không thể tách rời của công tác quản trị cơ sở dữ liệu, DB2 9 được trang bị một tiện ích giám sát được gọi là trình giám sát hệ thống cơ sở dữ liệu. Mặc dù cái tên "trình giám sát hệ thống cơ sở dữ liệu" hàm ý rằng chỉ có một công cụ giám sát được cung cấp, nhưng trong thực tế trình giám sát hệ thống cơ sở dữ liệu gồm có hai công cụ riêng biệt, có thể được sử dụng để thu giữ và trả về các thông tin giám sát hệ thống: một trình giám sát chụp nhanh và một hoặc nhiều trình giám sát sự kiện. Trình giám sát chụp nhanh cho phép bạn chụp một bức tranh về trạng thái của cơ sở dữ liệu tại một thời điểm cụ thể trong khi các trình giám sát sự kiện thu giữ và ghi lại dữ liệu khi các sự kiện cơ sở dữ liệu cụ thể xảy ra. Các thông tin thu thập bởi cả hai công cụ này được lưu trữ trong các thực thể được gọi là các phần tử giám sát (hoặc gọi là phần tử dữ liệu). Mỗi phần tử giám sát được sử dụng được xác định bởi một tên duy nhất và được thiết kế để nắm giữ một loại hình thông tin cụ thể. Các kiểu phần tử sau đây được sử dụng để lưu trữ dữ liệu giám sát:
Bộ đếm (Counters). Bộ đếm lưu giữ tổng số lần mà các hành động hay sự kiện đã xảy ra. Giá trị của bộ đếm tăng lên trong suốt cuộc đời của trình giám sát, thường thì phần tử bộ đếm giám sát cho phép bắt đầu lại. Một ví dụ về phần tử bộ đếm là tổng số câu lệnh SQL đã được thi hành đối với cơ sở dữ liệu.
Bộ đo (Gauges). Bộ đo lưu giữ số lần mà hành động hay sự kiện đã xảy ra tại một thời điểm cụ thể. Khác với các giá trị của bộ đếm, các giá trị của bộ đo có thể tăng hoặc giảm và giá trị của nó tại một thời điểm bất kỳ nào đó thường phụ thuộc vào mức độ hoạt động của cơ sở dữ liệu. Một ví dụ về phần tử bộ đo là số lượng các ứng dụng hiện đang được kết nối với cơ sở dữ liệu.
Ngấn nước (Watermarks). Ngấn nước cho biết giá trị cao nhất (tối đa) hoặc thấp nhất (tối thiểu) của một mục kể từ khi trình giám sát bắt đầu. Một ví dụ về phần tử ngấn nước là số lượng lớn nhất các hàng bị tác động bởi một hoạt động cập nhật.
Thông tin (Information). Theo như tên gọi, các phần tử thông tin cung cấp các chi tiết mang tính chất tham khảo về tất cả các hoạt động giám sát được thực hiện. Ví dụ về các phần tử thông tin bao gồm tên của pool đệm, tên cơ sở dữ liệu và các bí danh, chi tiết đường dẫn, v.v..
Mốc thời gian (Timestamps). Mốc thời gian cho biết ngày giờ mà một hoạt động hay sự kiện đã diễn ra. Các giá trị của mốc thời gian được tính bằng số giây và phần triệu của giây đã trôi qua kể từ ngày 1 tháng Một năm 1970. Một ví dụ về phần tử mốc thời gian là ngày giờ thiết lập kết nối đầu tiên tới cơ sở dữ liệu.
Thời gian (Time). Các phần tử thời gian lưu vết thời lượng đã dùng để thực hiện một hoạt động hoặc một sự kiện. Các giá trị thời gian được tính bằng số giây và phần triệu giây đã trôi qua kể từ khi hoạt động hay sự kiện này được bắt đầu và một số phần tử thời gian cho phép đặt bắt đầu lại. Một ví dụ về phần tử thời gian là lượng thời gian đã được dùng để thực hiện một hoạt động sắp xếp.
Trình giám sát của hệ thống cơ sở dữ liệu có thể sử dụng bất kỳ tổ hợp nào của các phần tử này để thu thập dữ liệu giám sát, và một khi dữ liệu đó đã được thu thập, thì có thể sử dụng một số phương thức để trình bày các dữ liệu lưu trữ trong mỗi phần tử đã sử dụng; đối với cả hai, trình giám sát chụp nhanh lẫn giám sát sự kiện, bạn có thể tùy chọn cách lưu trữ tất cả dữ liệu thu thập được, vào trong một tệp tin hay vào các bảng cơ sở dữ liệu, xem chúng trên màn hình, hoặc xử lý chúng bằng cách sử dụng một ứng dụng tùy chỉnh. (Trình giám sát hệ thống cơ sở dữ liệu trả về dữ liệu giám sát cho một ứng dụng khách, sử dụng dòng dữ liệu tự mô tả. Với ứng dụng giám sát chụp nhanh bạn gọi ra các API chụp nhanh thích hợp để chụp nhanh dữ liệu và sau đó xử lý dòng dữ liệu được trả về; với một ứng dụng giám sát sự kiện, bạn chuẩn bị để nhận dữ liệu được tạo ra thông qua một tệp tin hoặc một đường ống (pipe) có đặt tên, kích hoạt trình giám sát sự kiện thích hợp và xử lý luồng dữ liệu dưới dạng đã nhận được.)
Trình giám sát chụp nhanh
Trình giám sát chụp nhanh được thiết kế để thu thập thông tin về trạng
thái của một cá thể trình quản trị cơ sở dữ liệu DB2 và các cơ sở dữ
liệu mà nó kiểm soát tại một thời điểm cụ thể (nói cách khác là
tại thời điểm thực hiện chụp nhanh). Việc chụp nhanh là hữu ích để xác
định tình trạng của một hệ thống cơ sở dữ liệu, và khi chụp nhanh theo
những khoảng thời gian đều đặn, thì chúng có thể cung cấp cho ta các
thông tin có giá trị, có thể sử dụng để quan sát các xu hướng và xác
định các khu vực có vấn đề tiềm tàng. Việc chụp nhanh có thể được thực
hiện bằng cách thi hành câu lệnh
GET
SNAPSHOT từ Trình xử lý dòng lệnh (Command Line Processor -
CLP) của DB2 bằng cách sử dụng các hàm bảng chụp nhanh thích hợp trong
một truy vấn, hoặc bằng cách sử dụng các giao diện lập trình (API)
giám sát chụp nhanh trong một ứng dụng C hoặc C++. Ngoài ra, có thể đo
cắt thiết kế chức năng chụp nhanh để trả về các kiểu giá trị dữ liệu
giám sát cụ thể (ví dụ: có thể định cấu hình một bản chụp nhanh chỉ để
trả lại các thông tin về pool đệm).
Các chuyển mạch của trình giám sát chụp nhanh
Thông thường thì việc thu thập các dữ liệu giám sát hệ thống đòi hỏi thêm tải công việc xử lý. Ví dụ, để tính toán thời gian thi hành câu lệnh SQL, trình quản lý cơ sở dữ liệu của DB2 phải gọi đến hệ điều hành để có được mốc thời gian trước và sau khi câu lệnh SQL được thực thi. Các cuộc gọi hệ thống kiểu này có thể chi phí đắt. Một tác động phụ khác của việc sử dụng trình giám sát hệ thống là lượng tiêu dùng bộ nhớ tăng lên – trình quản trị cơ sở dữ liệu DB2 sử dụng bộ nhớ để lưu trữ các dữ liệu đã thu thập được cho mọi phần tử giám sát đang được theo dõi bởi trình giám sát hệ thống.
Để giúp giảm thiểu tải công việc tăng thêm liên quan đến việc thu thập thông tin giám sát hệ thống này, một nhóm các chuyển mạch được gọi là các chuyển mạch giám sát chụp nhanh có thể được sử dụng để kiểm soát những thông tin nào được thu thập khi chụp nhanh được thực hiện; kiểu và số lượng thông tin sẽ thu thập được xác định thông qua cách thiết lập các chuyển mạch chụp nhanh. Mỗi chuyển mạch giám sát chụp nhanh có hai cách thiết đặt: ON (bật) và OFF (tắt). Khi chuyển mạch giám sát chụp nhanh được đặt ở trạng thái OFF, thì các thông tin giám sát không được thu thập cho các phần tử thuộc quyền kiểm soát của chuyển mạch ấy. Các thông tin sẽ được thu thập nếu chuyển mạch được đặt ở trạng thái ON. (Xin nhớ rằng một số lượng đáng kể các thông tin giám sát không nằm dưới sự kiểm soát của các chuyển mạch và luôn luôn được thu thập, bất kể các chuyển mạch giám sát chụp nhanh đã được thiết lập như thế nào). Bạn có thể xem các chuyển mạch có sẵn, cùng với các mô tả về các loại thông tin thu thập được khi từng bộ chuyển mạch được thiết lập ở trạng thái bật (ON) tại bảng 1.
Bảng 1. Các chuyển mạch giám sát chụp nhanh
Theo mặc định, tất cả các chuyển mạch tại bảng 1 được đặt ở trạng thái tắt (OFF), ngoại trừ chuyển mạch TIMESTAMP (mốc thời gian), được thiết lập ở trạng thái bật (ON) và được khởi tạo khi cá thể khởi chạy lần đầu tiên.
Xem các thiết đặt của các chuyển mạch giám sát chụp nhanh hiện tại
Như đã đề cập ở phần trước thì kiểu và số lượng thông tin được thu thập
khi thực hiện một bản chụp nhanh sẽ được kiểm soát, trong một chừng
mực nào đó, tùy theo cách các chuyển mạch chụp nhanh đã được thiết lập
như thế nào. Trước khi bạn chụp nhanh cơ sở dữ liệu, thì điều quan
trọng là bạn phải biết được chuyển mạch chụp nhanh nào đã được bật và
chuyển mạch chụp nhanh nào vẫn tắt. Làm thế nào để bạn có thể biết
được các thiết lập hiện tại của mỗi chuyển mạch chụp nhanh là gì ?
Cách đơn giản nhất là thi hành câu lệnh
GET
MONITOR SWITCHES từ trong CLP. Cú pháp cơ bản cho lệnh này
là:
GET MONITOR SWITCHES <AT DBPARTITIONNUM
[PartitionNum]>
ở đây tham số PartitonNum xác định phân đoạn của cơ sở dữ liệu (trong môi trường cơ sở dữ liệu nhiều phân đoạn) nơi trạng thái của các chuyển mạch giám sát chụp nhanh có sẵn sẽ được lấy ra và được hiển thị.
Lưu ý: Các tham số hiển thị trong dấu ngoặc nhọn (< >) là tùy chọn, các tham số hoặc tùy chọn được hiển thị trong dấu ngoặc vuông ([ ]) là bắt buộc; và dấu phẩy kèm theo dấu ba chấm (...) biểu thị rằng các tham số trước đó có thể được lặp lại nhiều lần.
Nếu bạn muốn nhận được và hiển thị trạng thái của các chuyển mạch giám
sát chụp nhanh cho một cơ sở dữ liệu một phân đoạn, bạn có thể làm
điểu này bằng cách thi hành lệnh
GET MONITOR
SWITCHES như sau:
GET MONITOR SWITCHES
Khi lệnh này được thi hành từ CLP, thì bạn sẽ thấy một kết quả đầu ra như ở hình bên dưới.
Kết quả đầu ra của lệnh GET MONITOR SWITCHES
Monitor Recording Switches Switch list for db partition number 0 Buffer Pool Activity Information (BUFFERPOOL) = OFF Lock Information (LOCK) = OFF Sorting Information (SORT) = OFF SQL Statement Information (STATEMENT) = OFF Table Activity Information (TABLE) = OFF Take Timestamp Information (TIMESTAMP) = ON 06-12-2006 10:30:00.028810 Unit of Work Information (UOW) = OFF
Khi xem xét chi tiết hơn kết quả này, bạn nhận thấy rằng chuyển mạch giám sát chụp nhanh mốc thời gian TIMESTAMP đã được bật và tất cả các chuyển mạch khác đang bị tắt. Giá trị của mốc thời gian tiếp ngay sau trạng thái của chuyển mạch giám sát TIMESTAMP cho bạn biết chính xác ngày tháng và thời giờ mà chuyển mạch giám sát mốc thời gian đã được bật lên (trong trường hợp này giá trị đó là ngày 12 tháng 6 năm 2006, lúc 10:30 sáng).
Thay đổi trạng thái của một chuyển mạch giám sát chụp nhanh
Một khi bạn biết được những chuyển mạch giám sát chụp nhanh nào đã được
bật lên và những chuyển mạch giám sát chụp nhanh nào đang ở trạng thái
tắt, thì bạn có thể sẽ cần thay đổi một hoặc nhiều thiết đặt các
chuyển mạch trước khi bạn bắt đầu quá trình giám sát. Các thiết đặt
chuyển mạch giám sát chụp nhanh có thể được thay đổi ở mức cá thể
trình quản trị cơ sở dữ liệu bằng cách sửa đổi các tham số cấu hình
thích hợp của trình quản trị cơ sở dữ liệu DB2 (xem bảng 1) với lệnh
UPDATE DATABASE MANAGER
CONFIGURATION.
Mặt khác, các thiết đặt chuyển mạch giám sát chụp nhanh có thể được
thay đổi ở mức ứng dụng bằng cách thi hành lệnh
UPDATE MONITOR SWITCHES. Cú pháp cơ bản cho lệnh này là:
UPDATE MONITOR SWITCHES USING [[SwitchID]
ON | OFF ,...]
ở đây tham số SwitchID xác định một hay nhiều chuyển mạch giám
sát chụp nhanh mà trạng thái phải được thay đổi. Tham số này có thể
chứa bất kỳ hoặc tất cả các giá trị sau:
BUFFERPOOL,
LOCK,
SORT,
STATEMENT,
TABLE,
TIMESTAMP và
UOW.
Nếu bạn muốn thay đổi trạng thái của chuyển mạch giám sát chụp nhanh
LOCK sang ON ở mức ứng dụng, bạn có thể làm điều này bằng cách thi
hành lệnh
UPDATE MONITOR SWITCHES như sau:
UPDATE MONITOR SWITCHES USING LOCKS ON
Tương tự, nếu bạn muốn thay đổi trạng thái của chuyển mạch giám sát chụp nhanh BUFFERPOOL sang OFF, bạn có thể làm điều này bằng cách thi hành lệnh UPDATE MONITOR SWITCHES như sau:
UPDATE MONITOR SWITCHES USING BUFFERPOOL
OFF
Việc thiết đặt các chuyển mạch giám sát chụp nhanh ở mức cá thể trình
quản trị cơ sở dữ liệu (sử dụng lệnh
UPDATE
DATABASE MANAGER CONFIGURATION) sẽ ảnh hưởng đến tất cả các
cơ sở dữ liệu dưới sự kiểm soát của cá thể ấy (nói cách khác, mọi ứng
dụng thiết lập một kết nối đến cơ sở dữ liệu dưới sự kiểm soát của cá
thể này sẽ kế thừa các thiết đặt chuyển mạch đã thực hiện trong cấu
hình của cá thể đó). Hơn nữa, các thiết đặt của chuyển mạch được thực
hiện ở mức cá thể vẫn tiếp tục còn lại thường trực khi cá thể khởi
động lại.
Việc thiết đặt các chuyển mạch giám sát ở mức ứng dụng (bằng cách sử
dụng lệnh
UPDATE MONITOR SWITCHES) chỉ ảnh
hưởng đến cơ sở dữ liệu mà ứng dụng đơn lẻ này tương tác với nó. Ngoài
ra, các thiết đặt cho chuyển mạch chỉ có tác dụng trong thời gian sống
của ứng dụng đó.
Thu giữ dữ liệu giám sát chụp nhanh
Ngay sau khi cơ sở dữ liệu được kích hoạt hoặc kết nối đến cơ sở dữ
liệu được thiết lập, trình giám sát chụp nhanh bắt đầu thu thập dữ
liệu giám sát. Tuy nhiên, phải thực hiện một cú chụp nhanh trước khi
có thể xem được bất kỳ dữ liệu nào đã thu thập. (Về bản chất, hình
chụp nhanh là hình ảnh những gì thể hiện các phần tử giám sát đang sử
dụng, tại một thời điểm cụ thể). Có thể thực hiện chụp nhanh bằng cách
nhúng API
db2GetSnapshot() vào một chương
trình ứng dụng, hoặc bằng cách thi hành lệnh
GET
SNAPSHOT Cú pháp cơ bản cho lệnh này là:
GET SNAPSHOT FOR [DATABASE MANAGER | DB MANAGER | DBM] | ALL DATABASES | ALL APPLICATIONS | ALL BUFFERPOOLS | ALL REMOTE_DATABASES | ALL REMOTE_APPLICATIONS | ALL ON [DatabaseAlias] | DATABASE ON [DatabaseAlias] | APPLICATIONS ON [DatabaseAlias] | TABLES ON [DatabaseAlias] | TABLESPACES ON [DatabaseAlias] | LOCKS ON [DatabaseAlias] | BUFFERPOOLS ON [DatabaseAlias] | DYNAMIC SQL ON [DatabaseAlias]
ở đây tham số DatabaseAlias xác định bí danh đã gán cho cơ sở dữ liệu mà các thông tin giám sát chụp nhanh sẽ được thu thập cho cơ sở dữ liệu đó.
Nếu bạn muốn có một hình chụp nhanh chỉ chứa dữ liệu thu thập về các khóa đang được nắm giữ bởi các ứng dụng tương tác với cơ sở dữ liệu có tên là PAYROLL, bạn có thể làm điều này bằng cách thi hành lệnh sau:
GET SNAPSHOT FOR LOCKS ON PAYROLL
Kết quả đầu ra của lệnh này sẽ trông giống như hình bên dưới. (Lưu ý rằng đây là một ví dụ đơn giản. Tình huống giám sát thực tế thường tạo ra một số lượng lớn dữ liệu..)
Ví dụ kết quả đầu ra của lệnh GET SNAPSHOT
Database Lock Snapshot Database name = PAYROLL Database path = C:\DB2\NODE0000\SQL00002\ Input database alias = PAYROLL Locks held = 2 Applications currently connected = 1 Agents currently waiting on locks = 0 Snapshot timestamp = 06-12-2004 08:39:40.750316 Application handle = 8 Application ID = *LOCAL.DB2.00E286133931 Sequence number = 0001 Application name = db2bp.exe CONNECT Authorization ID = DB2ADMIN Application status = UOW Waiting Status change time = Not Collected Application code page = 1252 Locks held = 2 Total wait time (ms) = Not Collected List Of Locks Lock Name = 0x94928D848F9F949E7B89505241 Lock Attributes = 0x00000000 Release Flags = 0x40000000 Lock Count = 1 Hold Count = 0 Lock Object Name = 0 Object Type = Internal P Lock Mode = S Lock Name = 0x96A09A989DA09A7D8E8A6C7441 Lock Attributes = 0x00000000 Release Flags = 0x40000000 Lock Count = 1 Hold Count = 0 Lock Object Name = 0 Object Type = Internal P Lock Mode = S
Như bạn thấy, câu lệnh
GET SNAPSHOT có thể
được dùng để thu giữ nhiều kiểu dữ liệu giám sát khác nhau, bao gồm:
- Dữ liệu của cá thể trình quàn lý cơ sở dữ liệu của DB2
- Dữ liệu của cơ sở dữ liệu cho tất cả các cơ sở dữ liệu đang hoạt động dưới sự kiểm soát của cá thể ấy
- Dữ liệu ứng dụng
- Dữ liệu về hoạt động của pool đệm
- Dữ liệu về vùng bảng
- Dữ liệu bảng
- Dữ liệu về khóa (thông tin về tất cả các khóa đang bị giữ)
- Dữ liệu về SQL động (thông tin tại đúng thời điểm về câu lệnh SQL được giữ tại bộ nhớ cache của câu lệnh SQL)
Bạn cũng có thể nhận thấy rằng có một sự tương quan trực tiếp giữa các chuyển mạch giám sát chụp nhanh sẵn có và các kiểu dữ liệu giám sát khác nhau có thể được thu thập khi một hình chụp nhanh được thực hiện. Nếu một chuyển mạch giám sát chụp nhanh cụ thể bị tắt đi và ảnh chụp nhanh các phần tử giám sát kết hợp với chuyển mạch đó được thực hiện, thì các dữ liệu giám sát thu được sẽ không có bất kỳ giá trị nào cả. (Trong ví dụ trước, một số giá trị được hiển thị với thông báo: Không thu thập được (Not Collected) vì chuyển mạch giám sát chụp nhanh tương ứng ở trạng thái tắt (OFF). Hơn nữa, nếu không có khóa nào được nắm giữ tại thời điểm thực hiện chụp nhanh, thì giá trị cho khóa đó là 0 và danh sách hiển thị các thông tin về khóa sẽ không được sinh ra.)
Thu giữ dữ liệu giám sát chụp nhanh bằng cách sử dụng SQL
Với các phiên bản trước của cơ sở dữ liệu phổ quát (UDB) DB2, cách duy
nhất để thu giữ dữ liệu giám sát chụp nhanh là thi hành lệnh
GET SNAPSHOT hoặc gọi API tương ứng của nó từ
trong một chương trình ứng dụng. Với DB2 phiên bản 8.1, thì khả năng
thu giữ dữ liệu của trình giám sát chụp nhanh bằng cách xây dựng một
truy vấn đã được đưa vào thêm. Phương pháp này dựa trên hai mươi hàm
bảng đặc biệt để giám sát chụp nhanh, các hàm này đã trở nên lỗi thời,
bị loại trong phiên bản 9.1. Bây giờ, dữ liệu giám sát chụp nhanh có
thể thu được bằng cách sử dụng một tập hợp mới các thường trình
(routines) SQL để truy cập dữ liệu được lưu giữ trong các khung nhìn
quản trị đặc biệt. Các thường trình và các khung nhìn này được mô tả
trong bảng 2.
Bảng 2. Các khung nhìn quản trị và các thường trình SQL quản trị về chụp nhanh
Nếu bạn muốn có thông tin về khóa của các cơ sở dữ liệu hiện đang kết nối chẳng hạn, bạn có thể làm điều này bằng cách thực hiện truy vấn sau:
SELECT AGENT_ID, LOCK_OBJECT_TYPE, LOCK_MODE, LOCK_STATUS FROM SYSIBMADM.SNAPLOCK
Hàm bảng
SNAP_GET_LOCK trả về cũng các thông
tin giống như khung nhìn quản trị
SNAPLOCK
nhưng nó cho phép bạn lấy ra các thông tin của một cơ sở dữ liệu cụ
thể hoặc cơ sở dữ liệu cụ thể trên một phân đoạn cơ sở dữ liệu cụ thể
(thay vì cơ sở dữ liệu hiện đang được kết nối). Lệnh truy vấn sử dụng
hàm bảng
SNAP_GET_LOCK như sau:
SELECT AGENT_ID, LOCK_OBJECT_TYPE, LOCK_MODE, LOCK_STATUS FROM TABLE(SNAP_GET_LOCK('',-1)) AS T
Khi được sử dụng với hàm bảng
SNAP_GET_LOCKWAIT, hàm bảng
SNAP_GET_LOCK cung cấp các thông tin tương tự như lệnh
GET SNAPSHOT FOR LOCKS ON
[DatabaseAlias].
Bắt đầu lại bộ đếm giám sát chụp nhanh
Trước đây bạn thấy rằng một trong những kiểu phần tử mà các phần tử
giám sát sử dụng để lưu trữ dữ liệu là một bộ đếm và các bộ đếm đó lưu
giữ tổng lũy kế số lần một hoạt động hay một sự kiện xảy ra. Giá trị
của bộ đếm tăng lên trong suốt thời gian tồn tại của trình giám sát.
Vậy thì việc đếm bắt đầu chính xác vào khi nào? Việc đếm thường bắt
đầu ngay khi chuyển mạch giám sát chụp nhanh được bật lên hoặc khi ta
kết nối vào cơ sở dữ liệu (nếu sử dụng giám sát ở mức cá thể (trình
quản trị cơ sở dữ liệu), thì việc đếm bắt đầu khi ứng dụng lần đầu
tiên thiết lập một kết nối đến cơ sở dữ liệu dưới sự kiểm soát của cá
thể ấy). Tuy nhiên, có những lúc ta muốn bắt đầu lại tất cả các bộ đếm
trở về 0 mà không phải tắt chuyển mạch giám sát chụp nhanh rồi bật lại
ngay, và không phải ngắt và thiết lập lại kết nối tới cơ sở dữ liệu.
Cách dễ dàng nhất để nhanh chóng đưa bộ đếm giám sát chụp nhanh về 0
là thực hiện lệnh
RESET MONITOR Cú pháp cơ
bản cho lệnh này là:
RESET MONITOR ALL
hoặc
RESET MONITOR FOR [DATABASE | DB] [DatabaseAlias]
ở đây tham số DatabaseAlias xác định bí danh của cơ sở dữ liệu mà các bộ đếm giám sát chụp nhanh cho cơ sở dữ liệu đó phải bắt đầu lại.
Nếu bạn muốn bắt đầu lại các bộ đếm giám sát chup nhanh cho tất cả các
cơ sở dữ liệu dưới sự kiểm soát của cá thể (trình quản trị cơ sở dữ
liệu), thì bạn có thể làm điều này bằng cách gắn với cá thể đó và thi
hành lệnh
RESET MONITOR sau:
RESET MONITOR ALL
Mặt khác, nếu bạn chỉ muốn bắt đầu lại các bộ đếm giám sát chụp nhanh
kết hợp với một cơ sở dữ liệu có tên là SAMPLE, thì bạn có thể làm
điều này bằng cách thực hiện lệnh
RESET
MONITOR như sau:
RESET MONITOR FOR DATABASE SAMPLE
Điều quan trọng mà bạn cần lưu ý là bạn không thể chọn lọc và bắt đầu
lại chỉ một số các bộ đếm của một nhóm giám sát cụ thể kiểm soát bởi
một chuyển mạch giám sát chụp nhanh bằng cách sử dụng lệnh
RESET MONITOR. Để thực hiện hoạt động kiểu
này, bạn phải tắt chuyển mạch giám sát chụp nhanh thích hợp rồi bật
lại ngay hoặc ngắt và thiết lập lại các kết nối tới cơ sở dữ liệu.
Thu giữ dữ liệu của trình giám sát sự kiện
Các trình giám sát sự kiện
Bạn vừa thấy rằng các trình giám sát chụp nhanh cung cấp một cách thức để thu giữ và ghi lại các thông tin về trạng thái của một cá thể (trình quản trị cơ sở dữ liệu) hay một cơ sở dữ liệu tại một thời điểm cụ thể. Ngược lại, các trình giám sát sự kiện thu thập dữ liệu khi xảy ra các sự kiện cụ thể hoặc các chuyển trạng thái. Trình giám sát sự kiện cung cấp một cách thức để thu thập dữ liệu giám sát khi các sự kiện hoặc các hoạt động xảy ra mà ta không thể giám sát được bằng cách sử dụng các trình giám sát chụp nhanh.
Ví dụ, giả sử bạn muốn thu thập dữ liệu giám sát bất cứ khi nào một chu trình khóa chết xảy ra. Nếu bạn quen với khái niệm khóa chết (deadlocks), thì bạn biết rằng một tiến trình đặc biệt được gọi là trình dò tìm khóa chết (daemon) lặng lẽ chạy ở mặt sau và "tỉnh dậy" theo các khoảng thời gian định trước để quét hệ thống khóa tìm các chu trình khóa chết. Nếu tìm thấy một chu trình khóa chết, thì trình dò tìm khóa chết sẽ chọn ngẫu nhiên một trong những giao dịch dính líu đến chu trình, cuộn ngược lại, và chấm dứt giao dịch ấy. Kết quả là giao dịch được chọn nhận được một mã lỗi SQL và tất cả các khóa đã giành được nhân danh giao dịch này sẽ được giải phóng để cho các giao dịch còn lại có thể tiến hành. Thông tin về một loạt các sự kiện như vậy không thể thu thập được bởi trình giám sát chụp nhanh bởi vì, rất nhiều khả năng là chu trình khóa chết sẽ bị phá vỡ từ lâu rồi trước khi một hình chụp nhanh có thể được thực hiện. Mặt khác, một trình giám sát sự kiện có thể thu được những thông tin quan trọng về sự kiện như vậy bởi vì nó sẽ được kích hoạt vào chính thời điểm mà chu trình khóa chết được phát hiện.
Có một sự khác biệt đáng kể nữa giữa hai trình giám sát này - trình giám sát chụp nhanh tồn tại như một là tiến trình ở mặt sau, nó bắt đầu thu thập dữ liệu giám sát một khi kết nối đến cơ sở dữ liệu được thiết lập. Ngược lại, các trình giám sát sự kiện phải được tạo ra trước khi có thể sử dụng chúng. Một số trình giám sát sự kiện khác nhau có thể tồn tại, và mỗi trình giám sát sự kiện được kích hoạt chỉ khi một kiểu sự kiện hoặc giao dịch cụ thể xảy ra. Bảng 3 cho thấy các kiểu sự kiện có thể làm cho một trình giám sát sự kiện được kích hoạt, cùng với các loại dữ liệu giám sát được thu thập đối với mỗi kiểu sự kiện.
Bảng 3. Các kiểu sự kiện và các dữ liệu được thu thập cho mỗi sự kiện
Do trình giám sát sự kiện là các đối tượng cơ sở dữ liệu đặc biệt cần phải được tạo ra trước khi có thể sử dụng chúng, nên chúng chỉ có thể thu thập dữ liệu giám sát cho các sự kiện hoặc các giao dịch diễn ra trong cơ sở dữ liệu mà chúng đã được định nghĩa. Các trình giám sát sự kiện không thể được sử dụng để thu thập dữ liệu giám sát ở mức cá thể (trình quản trị cơ sở dữ liệu).
Tạo các trình giám sát sự kiện
Bạn
có thể tạo các trình giám sát sự kiện trực tiếp từ Trung tâm điều
khiển (Control Center - chọn mục Create Event Monitor từ trình đơn
Event Monitors) hoặc bằng cách thi hành câu lệnh SQL
CREATE EVENT MONITOR. Cú pháp cơ bản cho câu
lệnh này là:
CREATE EVENT MONITOR [Name] FOR [DATABASE | BUFFERPOOLS | TABLESPACES | TABLES | DEADLOCKS <WITH DETAIL> | CONNECTIONS <WHERE [EventCondition]> | STATEMENTS <WHERE [EventCondition]]> | TRANSACTIONS <WHERE [EventCondition]> , ...] WRITE TO [TABLE [GroupName] (TABLE [TableName]) | PIPE [PipeName] | FILE [DirectoryName]] [MANUALSTART | AUTOSTART]
ở đây:
- Name là tên để gán cho trình giám sát sự kiện sẽ được tạo ra.
- EventCondition là điều kiện được sử dụng để xác định trình giám sát sự kiện sẽ thu thập dữ liệu cho CONNECTION, STATEMENT hay TRANSACTION nào.
- GroupName là nhóm dữ liệu lôgic mà bảng đích đã được định nghĩa cho nó. (Xem bảng 3 để biết các giá trị thích hợp để sử dụng cho tham số này.)
- TableName là tên được gán cho bảng cơ sở dữ liệu mà tất cả các dữ liệu giám sát sự kiện được ghi vào.
- PipeName là tên được gán cho đường ống có đặt tên mà tất cả các dữ liệu giám sát sự kiện được ghi vào.
- DirectoryName là tên được gán cho thư mục mà một hoặc nhiều tệp tin chứa dữ liệu giám sát sự kiện sẽ ghi vào.
Giả sử rằng bạn muốn tạo ra một trình giám sát sự kiện thu thập
các giá trị của tất cả các bộ đếm ở mức ứng dụng và ghi chúng vào một
bảng cơ sở dữ liệu được đặt tên là CONN_DATA mỗi khi một ứng dụng
ngừng kết nối của nó đến một cơ sở dữ liệu. Để làm điều này, bạn thực
hiện câu lệnh
CREATE EVENT MONITOR như sau:
CREATE EVENT MONITOR CONN_EVENTS FOR CONNECTIONS WRITE TO TABLE CONN (TABLE CONN_DATA)
Bây
giờ giả sử rằng bạn muốn tạo ra một trình giám sát sự kiện thu thập
các dữ liệu giám sát cho các sự kiện của cả pool đệm lẫn vùng bảng và
ghi tất cả các dữ liệu thu thập được vào thư mục có tên
/export/home/bpts_data. Để làm điều đó, bạn thực hiện câu
lệnh
CREATE EVENT MONITOR như sau:
CREATE EVENT MONITOR BPTS_EVENTS FOR BUFFERPOOLS, TABLESPACES WRITE TO FILE '/export/home/BPTS_DATA'
Như bạn thấy, khi tạo một trình giám sát sự kiện, bạn phải chỉ rõ kiểu sự kiện sẽ kích hoạt trình giám sát sự kiện, cũng như vị trí nơi mà tất cả các dữ liệu thu thập được phải được ghi vào.
Kết quả đầu ra
từ một trình giám sát sự kiện có thể được ghi vào một hoặc nhiều bảng
cơ sở dữ liệu, vào một hay nhiều tệp tin bên ngoài, hoặc vào một đường
ống có đặt tên. Các trình giám sát sự kiện bảng và đường ống phân
luồng các bản ghi sự kiện trực tiếp vào bảng hoặc đường ống có tên đã
chỉ rõ. Mặt khác, các trình giám sát sự kiện tệp phân luồng các bản
ghi sự kiện vào tệp tin gồm tám chữ số, có phần mở rộng là
.evt (ví dụ:
00000000.evt,
00000001.evt,
v.v…). Dữ liệu được lưu giữ trong các tập tin này phải được xử lý như
thể nó là một dòng dữ liệu duy nhất được lưu giữ trong một tệp tin duy
nhất, mặc dù trên thực tế dữ liệu được chia thành nhiều tệp tin nhỏ
(điểm bắt đầu của dòng dữ liệu là byte dữ liệu đầu tiên được tìm thấy
trong tệp tin tên là
00000000.evt và điểm
cuối của dòng dữ liệu là byte dữ liệu cuối cùng được tìm thấy trong
các tệp tin cuối cùng được tạo ra).
Nếu bạn chỉ rõ rằng kết quả
đầu ra từ một trình giám sát sự kiện sẽ được lưu trữ trong các bảng cơ
sở dữ liệu, thì tất cả các bảng đích sẽ được tự động tạo ra khi lệnh
CREATE EVENT MONITOR được thi hành.
(Nếu việc tạo ra bảng không thành công do bất kỳ lý do gì, thì mã lỗi
được tạo ra và lệnh
CREATE EVENT MONITOR
không thực hiện được). Tuy nhiên, nếu bạn chỉ rõ rằng kết quả đầu ra
từ một trình giám sát sự kiện sẽ được ghi vào một hay nhiều tệp tin
bên ngoài hoặc một đường ống được đặt tên, thì thư mục đầu ra hoặc
đường ống được đặt tên đã chỉ rõ phải tồn tại và người sở hữu cá thể
trình quản lý cơ sở dữ liệu của DB2 phải có khả năng ghi vào thư mục
đó vào thời điểm mà trình giám sát sự kiện được kích hoạt. Ngoài ra,
nếu sử dụng một đường ống được đặt tên, thì ứng dụng giám sát đường
ống được đặt tên phải đang chạy và nó phải mở các đường ống cho việc
đọc trước khi trình giám sát sự kiện được kích hoạt.
Bắt đầu và ngừng chạy các trình giám sự kiện
Nếu bạn chỉ định tùy chọn
AUTOSTART khi tạo một trình giám sát sự kiện, thì trình
giám sát sẽ tự động khởi động khi cơ sở dữ liệu chứa trình giám sát sự
kiện được khởi chạy. (Cơ sở dữ liệu được khởi chạy khi nó được kích
hoạt với lệnh
ACTIVATE DATABASE hoặc khi
kết nối đầu tiên tới cơ sở dữ liệu được thiết lập). Nếu bạn sử dụng
tùy chọn
MANUALSTART hoặc không chỉ định
tùy chọn nào (trong trường hợp đó, tùy chọn
MANUALSTART được sử dụng theo mặc định), thì trình giám
sát sự kiện được sinh ra với lựa chọn đó sẽ không thu thập dữ liệu
giám sát cho đến khi nó được khởi chạy. Trình giám sát sự kiện có thể
được khởi chạy (và ngừng lại) bằng cách thực hiện câu lệnh SQL
SET EVENT MONITOR. Cú pháp cơ bản cho câu
lệnh này là:
SET EVENT MONITOR [MonitorName] STATE <=> [MonitorState]
ỏ đây MonitorName là tên của trình giám sát sự kiện mà trạng thái của nó cần được thay đổi và MonitorState là trạng thái mà trình giám sát sự kiện đã chỉ rõ cần phải được đặt vào. Để khởi chạy trình giám sát sự kiện (nói cách khác là đặt nó ở trạng thái “hoạt động” (active), thì bạn phải gán giá trị 1 cho tham số MonitorState Để ngừng trình giám sát sự kiện (nói cách khác là đặt nó ở trạng thái “không hoạt động” (inactive), bạn gán giá trị 0 cho tham số đó.
Giả sử rằng bạn muốn khởi chạy một
trình giám sát sự kiện có tên là CONN_EVENTS đã được tạo ra với tùy
chọn
MANUALSTART. Bạn hãy làm điều này bằng
cách thi hành câu lệnh sau:
SET EVENT MONITOR CONN_EVENTS STATE 1
Mặt khác, nếu bạn muốn ngừng trình giám sát sự kiện CONN_EVENTS, thì hãy thi hành câu lệnh sau:
SET EVENT MONITOR CONN_EVENTS STATE 0
Bạn cũng có thể bắt đầu và ngừng trình giám sát sự kiện bằng cách chọn tên trình giám sát sự kiện thích hợp trong Trung tâm điều khiển (Control Center) và chọn một hành động (Start Event Monitoring hoặc Stop Event Monitoring) từ trình đơn Event Monitors.
Hàm SQL
EVENT_MON_STATE có thể được dùng để xác định
tình trạng hiện thời của bất kỳ trình giám sát sự kiện nào đã được
định nghĩa cho cơ sở dữ liệu. Hàm này phải được sử dụng trong một truy
vấn giống như sau:
SELECT EVENT_MON_STATE('CONN_EVENTS') FROM
SYSIBM.SYSDUMMY1
(Trong ví dụ này, bảng SYSIBM.SYSDUMMY1 là một bảng rỗng thường được sử dụng như một mục giữ chỗ - Placeholder)
Một khi được khởi chạy, trình giám sát sự kiện nằm lặng lẽ tại nền sau và chờ đợi một trong những sự kiện hoặc bước chuyển trạng thái mà nó được thiết kế để giám sát diễn ra. Khi sự kiện hoặc bước chuyển trạng thái đó xảy ra, trình giám sát sự kiện thu thập dữ liệu giám sát thích hợp và ghi nó vào kết quả đầu ra đích của trình giám sát (bảng, thư mục hoặc đường ống có đặt tên). Sự kiện hoặc bước chuyển trạng thái tự kiểm soát khi nào thì dữ liệu giám sát được thu thập; các quản trị viên cơ sở dữ liệu không cần phải thực hiện bất kỳ bước bổ sung thêm nào (không giống như khi sử dụng trình giám sát chụp nhanh).
Buộc trình giám sát sự kiện sinh ra kết quả đầu ra
Đôi khi một trình giám sát sự kiện có tần số tạo bản ghi
thấp (chẳng hạn như một trình giám sát sự kiện được thiết kế để giám
sát sự kiện DATABASE), có thể chứa dữ liệu giám sát sự kiện trong bộ
nhớ mà chưa được ghi vào vị trí đích của trình giám sát sự kiện (vì
chỉ bản ghi sự kiện bộ phận là tồn tại). Để kiểm tra các nội dung của
các bộ đệm nội bộ đang hoạt động của trình giám sát sự kiện, bạn thi
hành câu lệnh SQL
FLUSH EVENT MONITOR. Cú
pháp cơ bản cho câu lệnh này là:
FLUSH EVENT MONITOR [MonitorName] <BUFFER>
ở đây MonitorName là trình giám sát sự kiện (gọi bằng tên) mà bạn muốn buộc nó phải ghi các nội dung của bộ đệm nội bộ đang hoạt động của mình vào vị trí đích.
Để buộc trình giám sát sự kiện có tên
CONN_EVENTS phải ghi các nội dung của bộ đệm nội bộ đang hoạt động vào
vị trí đích của nó, bạn thi hành câu lệnh
FLUSH
EVENT MONITOR như sau:
FLUSH EVENT MONITOR CONN_EVENTS
Theo
mặc định, các bản ghi được ghi sớm vào một vị trí đích của trình giám
sát sự kiện sẽ được ghi nhật ký lại trong nhật ký của trình giám sát
sự kiện và được gán một mã định danh của bản ghi bộ phận. Tuy nhiên,
nếu bạn chỉ rõ tùy chọn
BUFFER khi thi hành
câu lệnh
FLUSH EVENT MONITOR thì chỉ các dữ
liệu giám sát có mặt trong bộ đệm nội bộ đang hoạt động của trình giám
sát sự kiện được ghi vào vị trí đích của trình giám sát sự kiện. Không
một bản ghi bộ phận nào được ghi nhật ký lại trong nhật ký của trình
giám sát sự kiện.
Điều quan trọng cần lưu ý là khi các trình
giám sát sự kiện được xả hết nội dung đã ghi nhớ, các bộ đếm không
được bắt đầu lại. Kết quả là, bản ghi giám sát sự kiện được sinh ra
tương ứng với câu lệnh
FLUSH EVENT MONITOR
không được thi hành vẫn sẽ được tạo ra khi trình giám sát sự kiện được
kích hoạt bình thường.
Xem dữ liệu giám sát sự kiện
Trước đây bạn thấy rằng dữ liệu giám sát sự kiện có thể được ghi vào một trong ba vị trí khác nhau:
- Các tệp tin. Kết quả đầu ra của trình giám sát sự kiện có thể được ghi vào một hay nhiều tệp tin. Hai tham số kiểm soát lượng không gian nhớ dành sẵn để sử dụng (MAXFILESIZE và MAXFILES) và một khi giới hạn không gian nhớ dành sẵn đã hết thì trình giám sát sự kiện sẽ tự động xả hết nội dung tất cả các sự kiện và tự ngừng lại. Thiết lập mặc định cho cả hai tham số là NONE, biểu thị rằng không có giới hạn về lượng không gian nhớ.
- Các đường ống. Kết quả đầu ra của trình giám sát sự kiện có thể được ghi vào một đường ống có đặt tên. Tên của đường ống phải được cung cấp, nhưng bản thân đường ống được đặt tên không cần phải tồn tại sẵn khi trình giám sát sự kiện được tạo ra. Tuy nhiên nó phải tồn tại khi trình giám sát sự kiện được kích hoạt.
- Các bảng. Kết quả đầu ra của trình giám sát sự kiện có thể được ghi vào một hay nhiều nhiều bảng có mặt trong cơ sở dữ liệu. Mỗi phần tử giám sát trong trình giám sát sự kiện được ánh xạ tới một bảng cùng tên. Dữ liệu của từng sự kiện riêng lẻ được đưa vào bảng thích hợp làm thành một hàng riêng.
Tại một thời điểm nào đó, bạn muốn xem xét dữ liệu mà trình giám sự kiện đã thu thập. Nếu dữ liệu thu thập được đã ghi vào một đường ống có đặt tên, thì ứng dụng tại đầu thu dữ liệu của đường ống thường có trách nhiệm hiển thị dữ liệu giám sát mà nó nhận được. Nếu dữ liệu thu thập được được ghi vào một bảng hoặc một tập hợp các tệp tin, thì bạn có thể xem dữ liệu đó bằng cách sử dụng một trong hai tiện ích đặc biệt: Trình phân tich sự kiện và công cụ tăng năng suất giám sát sự kiện.
Trình phân tích sự kiện là một công cụ giao diện người
dùng bằng đồ họa (GUI) có thể được kích hoạt bằng cách chọn trình giám
sát sự kiện mong muốn tại Trung tâm điều khiển và sau đó chọn hành
động thích hợp từ trình đơn Event Monitors hoặc bằng cách thi hành
lệnh
db2eva. Một khi được kích hoạt, trình
phân tích sự kiện cho phép bạn đi sâu xuống và xem các thông tin mà
một trình giám sát sự kiện cụ thể đã thu thập được. Hình 1 cho thấy
trình phân tích sự kiện trông ra sao khi nó lần đầu tiên được kích
hoạt.
Hình 1. Trình phân tích sự kiện
Trình phân tích các sự kiện chỉ có thể được sử dụng để xem dữ liệu giám sát sự kiện đã được thu thập và được lưu trữ trong bảng cơ sở dữ liệu. Để xem dữ liệu giám sát sự kiện đã được ghi vào các tệp tin (và vào đường ống có đặt tên), bạn phải sử dụng các công cụ tăng năng xuất của trình giám sát sự kiện dạng văn bản, nó lấy ra các thông tin từ các tệp tin dữ liệu giám sát sự kiện hoặc từ đường ống có đặt tên và tạo ra một bản báo cáo đúng định dạng. (Các tệp tin của trình giám sát sự kiện và các đường ống có đặt tên có chứa các luồng dữ liệu nhị phân của nhóm dữ liệu lô gic cần phải được định dạng trước khi chúng có thể được hiển thị.)
Để kích hoạt công cụ tăng năng suất của trình
giám sát sự kiện, bạn thi hành lệnh
db2evmon. Cú pháp cơ bản của lệnh này như sau:
db2evmon -db [DatabaseAlias] -evm [MonitorName]
ở đây DatabaseAlias là cơ sở dữ liệu (gọi theo bí danh) mà trên đó có định nghĩa trình giám sát sự kiện có dữ liệu cần hiển thị và MonitorName là tên được gán cho trình giám sát sự kiện, có dữ liệu cần hiển thị.
hoặc
db2evmon -path [MonitorTarget]
ở đây MonitorTarget là vị trí (thư mục hoặc đường ống có đặt tên), nơi lưu giữ dữ liệu được thu thập bởi trình giám sát sự kiện đã chỉ rõ.
Ví dụ, để định dạng và hiển thị tất cả các dữ liệu được thu thập bởi một trình giám sát sự kiện có tên là CONN_EVENTS đã được định nghĩa trong một cơ sở dữ liệu có tên là SAMPLE, bạn thi hành lệnh sau đây (giả định là dữ liệu giám sát được ghi vào một tệp tin):
db2evmon -db SAMPLE -evm CONN_EVENTS
Giả sử trình giám sát kiện có tên là CONN_EVENTS được tạo ra bằng cách thực hiện câu lệnh SQL sau:
CREATE EVENT MONITOR CONN_EVENTS FOR CONNECTIONS
WRITE TO FILE 'C:\MONDATA' AUTOSTART
Và giả định một ứng dụng đã thiết lập một kết nối đến cơ sở dữ liệu SAMPLE (động tác này làm cho trình giám sát sự kiện thu thập và sinh ra dữ liệu giám sát), kết quả đầu ra được tạo ra khi sử dụng công cụ tăng năng suất của trình giám sát sự kiện để xem xét dữ liệu đó sẽ giống như ví dụ dưới đây.
Ví dụ kết quả đầu ra được tạo ra bởi công cụ tăng năng suất của trình giám sát sự kiện
Reading C:\mondata\00000000.EVT ... -------------------------------------------------------------------------- EVENT LOG HEADER Event Monitor name: CONN_EVENTS Server Product ID: SQL09000 Version of event monitor data: 8 Byte order: LITTLE ENDIAN Number of nodes in db2 instance: 1 Codepage of database: 1208 Territory code of database: 1 Server instance name: DB2 -------------------------------------------------------------------------- -------------------------------------------------------------------------- Database Name: SAMPLE Database Path: C:\DB2\NODE0000\SQL00002\ First connection timestamp: 06/22/2006 00:56:40.086671 Event Monitor Start time: 06/22/2006 00:56:40.662668 -------------------------------------------------------------------------- 3) Connection Header Event ... Appl Handle: 55 Appl Id: *LOCAL.DB2.060622045634 Appl Seq number: 00001 DRDA AS Correlation Token: *LOCAL.DB2.060622045634 Program Name : db2bp.exe Authorization Id: RSANDERS Execution Id : RSANDERS Codepage Id: 1252 Territory code: 0 Client Process Id: 1992 Client Database Alias: SAMPLE Client Product Id: SQL09000 Client Platform: Unknown Client Communication Protocol: Local Client Network Name: rsanders-lxp Connect timestamp: 06/22/2006 00:56:40.086671 4) Connection Event ... -------------------------------------------------------------------------- Database Name: SAMPLE Database Path: C:\DB2\NODE0000\SQL00002\ First connection timestamp: 06/22/2006 00:57:36.727014 Event Monitor Start time: 06/22/2006 00:57:37.223404 --------------------------------------------------------------------------
Các chỉ dẫn cách sử dụng trình giám sát sự kiện
Các trình giám sát sự kiện chỉ nên được sử dụng để giám sát các sự kiện cụ thể hoặc các luồng công việc ngắn. Chúng được thiết kế để cung cấp thông tin rất cụ thể, có thể được sử dụng để chẩn đoán các vấn đề hoặc các hành vi không mong muốn của một cơ sở dữ liệu hay ứng dụng.
Không giống như các trình chụp nhanh, trình giám sát sự kiện có tác động vô cùng lớn đến hiệu năng. Đây là do số lượng thông tin được ghi ra cho từng đối tượng sự kiện. Thêm vào đó, trình giám sát sự kiện của câu lệnh SQL gây ra một tác động thậm chí còn nặng nề hơn đối với hiệu năng bởi vì có những công việc phụ thêm mà máy cơ sở dữ liệu phải thực hiện mỗi khi một truy vấn được thi hành: thay vì chỉ cần đơn giản thực thi một câu truy vấn, Trình quản lý cơ sở dữ liệu DB2 cũng phải tạo ra và ghi lại tất cả các đặc trưng và thông tin thời gian chạy kết hợp với truy vấn. Nếu thông tin này được ghi vào một tệp tin văn bản, thì thậm chí nó làm máy tính chạy chậm hơn nữa.
Nói về các tệp tin, khi tạo các trình giám sát sự kiện ghi dữ liệu vào tệp tin, thì việc đặt giới hạn cho kích thước tệp tin là một ý tưởng tốt để kiểm soát lượng không gian đĩa mà kết quả đầu ra của trình giám sát sự kiện sẽ tiêu thụ. Mặt khác, nếu bạn đang giám sát một hệ thống xử lý giao dịch trực tuyến (OLTP) khối lượng lớn, thì kểt quả đầu ra có thể nhanh chóng tăng lên đến hàng trăm megabyte.
Một trong những cách sử dụng phổ biến nhất của trình giám sát sự kiện là thu giữ các thông tin về khóa chết. (Trình giám sát sự kiện khóa chết không viết ra nhiều dữ liệu và chỉ thỉnh thoảng được kích hoạt, do vậy có thể chấp nhận không áp đặt giới hạn kích thước tệp tin). Nếu không sử dụng một trình giám sát sự kiện, thì ta gần như không thể xác định chính xác được những khóa nào và các ứng dụng nào dính líu đến chu trình khóa chết. Trình giám sát sự kiện khóa chết sẽ thu thập các thông tin về tất cả các ứng dụng và các khóa của chúng khi một chu trình khóa chết xảy ra. Được trang bị các thông tin này, chính câu lệnh SQL đã gây ra chu trình khóa chết sẽ được giám sát hoặc được thay đổi để sửa chữa tình hình. Bạn đừng quên rằng ứng dụng mà DB2 gán nhãn là nguyên nhân gây ra khóa chết chỉ là ứng dụng cuối cùng dính líu đến chu trình khóa chết - nguyên nhân thực sự có thể là một giao dịch đã được bắt đầu sớm hơn nhiều bởi một ứng dụng khác. Bạn phải đảm bảo rằng mình đã xem xét tất cả các khóa và các ứng dụng dính líu đến để xác định một cách chính xác vấn đề khởi nguồn từ đâu.
Cách sử dụng phổ biến thứ hai của các trình giám sát sự kiện là theo vết quá trình xử lý câu lệnh SQL. Trình giám sát sự kiện của câu lệnh SQL có thể khá hữu ích vì nó bẫy cả câu lệnh SQL động và tĩnh. Đây là điều cốt yếu nếu một ứng dụng sử dụng các câu lệnh SQL được tiền biên dịch, các câu lệnh này không thu giữ được bằng cách sử dụng hình chụp nhanh câu lệnh SQL. Khi một trình giám sát sự kiện được sử dụng để thu giữ thông tin về mọi câu lệnh SQL đang được thi hành, thì các tính chất của từng câu lệnh, như số hàng đã được đọc, được chọn, được xóa, v.v, được ghi lại, và không được trình bày dưới dạng tổng gộp giống như trường hợp thu giữ bằng hình chụp nhanh. Hơn nữa, bởi vì khung thời gian thi hành và thời điểm bắt đầu và dừng xử lý cũng được ghi lại, nên có thể thực hiện các phân tích chi tiết các giao dịch và cách mà một ứng dụng thực hiện câu lệnh SQL ảnh hưởng đến việc thực hiện câu lệnh SQL bởi các ứng dụng khác như thế nào. Tuy nhiên, vì lý do khối lượng thông tin được tạo ra và tải công việc cần phải thực hiện thêm để chạy một trình giám sát câu lệnh SQL, nên một trình giám sát như vậy chỉ nên được sử dụng cho các kiểm thử ngắn hoặc để xác định vấn đề, và chúng không nên được dùng trong môi trường sản xuất.
Giám sát tình trạng sức khỏe của máy tính và Trung tâm sức khỏe của máy tính
Giám sát tình trạng sức khỏe của máy tính
Mặc dù trình giám sát chụp nhanh và trình giám sát sự kiện làm việc một cách khác nhau (trình giám sát chụp nhanh được sử dụng để thu giữ thông tin về tình trạng hiện thời của một cá thể và/hoặc của cơ sở dữ liệu tại một điểm nhất định, còn trình giám sát sự kiện được sử dụng để thu thập dữ liệu giám sát khi các sự kiện hoặc bước chuyển trạng thái cụ thể xảy ra), chúng có một điểm chung, đó là cả hai đều được thiết kế để giúp xác định các khu vực có vấn đề và đã ảnh hưởng xấu đến hiệu năng của một hệ thống cơ sở dữ liệu. Với phiên bản UDB DB2 8.1, IBM đã đưa thêm vào một công cụ mới để giúp các quản trị viên cơ sở dữ liệu giám sát tình trạng của hệ thống UDB DB2: trình giám sát sức khỏe máy tính. Công cụ này bổ sung thêm khả năng quản lý bằng ngoại lệ cho DB2 9 bằng cách cảnh báo cho các quản trị viên về các vấn đề tiềm tàng liên quan đến trình trạng sức khỏe của hệ thống trước khi chúng trở thành các vấn đề ảnh hưởng đến hiệu năng của hệ thống.
Trình giám sát sức khỏe hệ thống đảo ngược mô hình chẩn đoán tình trạng sức khỏe của hệ thống từ mô hình của một quản trị viên nhằm tìm kiếm nguồn gốc của vấn đề đang tồn tại bằng cách cho chạy trình giám sát chụp nhanh và trình giám sát sự kiện tại các thời điểm khác nhau và phân tích một lượng lớn các dữ liệu để tìm kiếm các chỉ báo về tình trạng yếu kém của hệ thống để DB2 tự giám sát bản thân nó và thông báo cho các nhân viên đã chọn lựa chỉ khi hệ thống gặp phải các tình trạng yếu kém hiện tại hoặc tiềm tàng.
Trình giám sát sức khỏe máy tính làm việc như thế nào
Trình giám sát tình trạng sức khỏe hệ thống là một công cụ phía máy chủ, nó chạy lặng lẽ tại nền sau của hệ thống và liên tục giám sát tình trạng sức khỏe của cả cá thể trình quản lý cơ sở dữ liệu DB2 lẫn của bất kỳ cơ sở dữ liệu nào thuộc quyền kiểm soát của nó. Không giống như trình giám sát hệ thống cơ sở dữ liệu, mà khi sử dụng nó phải chịu thêm tải công việc xử lý bổ sung, trình giám sát sức khỏe hệ thống lợi dụng công nghệ giám sát mới, không có tác động đáng kể đến hiệu năng. Và trình giám sát sức khỏe không đòi hỏi có sự can thiệp của người sử dụng (một sự khác biệt nữa giữa nó và trình giám sát hệ thống cơ sở dữ liệu).
Trình giám sát sức khỏe hệ thống sử dụng một số chỉ báo về sức khỏe để đánh giá một số khía cạnh cụ thể về hiệu năng của cá thể và của cơ sở dữ liệu. Mỗi chỉ báo về sức khỏe hệ thống hoạt động giống như một phép đo chính xác mà trình giám sát sức khỏe hệ thống sẽ kiểm tra liên tục để đo lường tình trạng sức khỏe của một khía cạnh cụ thể của một lớp các đối tượng cơ sở dữ liệu cụ thể. Đến lượt mình, các chỉ báo tình trạng sức khỏe đo đạc một tập hữu hạn các trạng thái của các đối tượng riêng biệt hoặc một dải liên tục các giá trị để xác định xem một đối tượng cụ thể có "khỏe mạnh" hay "không khỏe mạnh". Các chỉ báo tình trạng sức khỏe có một bộ các giá trị ngưỡng định sẵn, và trình giám sát tình trạng sức khỏe thường xuyên so sánh trạng thái của hệ thống với các ngưỡng đó - bạn có thể sửa đổi các ngưỡng giá trị này để đáp ứng nhu cầu riêng của bạn. Nếu trình giám sát sức khỏe hệ thống thấy rằng một ngưỡng giới hạn cụ thể nào đó đã bị vượt quá (ví dụ: lượng không gian nhớ dành cho nhật ký tụt xuống dưới một mức nhất định) hoặc phát hiện ra tình trạng bất thường của một đối tượng cụ thể (ví dụ, một cá thể ngừng hoạt động), nó sẽ tự động phát ra cảnh báo thông qua các kênh báo cáo đã chỉ định. Có các chỉ báo sức khỏe dành cho các thành phần sau:
- Cá thể (trình quản lý cơ sở dữ liệu)
- Cơ sở dữ liệu
- Nhật ký
- Lưu trữ vùng bảng
- Sắp xếp
- Bộ nhớ sẵn (caches) dành cho gói và danh mục
- Vùng làm việc
- Bộ nhớ
- Tương tranh các ứng dụng
Trình giám sát tình trạng sức khỏe có thể tạo ra ba loại cảnh báo: chú ý (attention), cảnh báo (warning) và báo động (alarm). Các chỉ báo trình trạng sức khỏe đo các trạng thái riêng lẻ sẽ đưa ra một cảnh báo bất cứ khi nào một tình trạng bất bình thường được đăng ký; các chỉ báo tình trạng sức khỏe đo một dải liên tục các giá trị, sử dụng các giá trị ngưỡng để xác định ranh giới (hoặc vùng) cho các trạng thái: bình thường, chú ý, cảnh báo, và báo động. Ví dụ: nếu một giá trị của chỉ báo tình trạng sức khỏe lọt vào ngưỡng xác định đây là khu vực báo động, thì báo động sẽ được phát ra, biểu thị rằng vấn đề này cần phải được chú ý ngay lập tức.
Bất cứ lúc nào một báo hiệu được phát ra, trình giám sát tình trạng sức khỏe hệ thống có thể thực hiện bất kỳ một trong số các hành động sau đây để báo cáo nó:
- Ghi lại các thông tin báo hiệu vào trong sổ nhật ký (Journal - tất cả các báo hiệu mức báo động được ghi vào sổ nhật ký)
- Gửi thông báo báo hiệu qua e-mail hay máy nhắn tin tới người chịu trách nhiệm về hệ thống
- Thực hiện một hoặc nhiều hành động đã được định cấu hình sẵn (ví dụ: chạy một tác vụ)
Theo mặc định, trình giám sát tình trạng sức khỏe hệ thống bị tắt đi khi một cá thể lần đầu tiên tạo ra. Tuy nhiên, bạn có thể bật nó lên bất kỳ lúc nào bằng cách chọn mục trình đơn thích hợp từ Trung tâm sức khỏe (Health Center) hoặc bằng cách gán giá trị ON cho tham số cấu hình health_mon của trình quản lý cơ sở dữ liệu DB2.
Điều quan trọng là cần lưu ý rằng một khi trình giám sát tình trạng sức khỏe hệ thống đã được kích hoạt, nếu nó tạo ra một báo hiệu trong khi bất kỳ một công cụ giao diện DB2 nào đang hoạt động, thì người dùng sẽ được báo hiệu bằng cách sử dụng biểu tượng Health Beacon. Health Beacon chỉ đơn giản là một biểu tượng dạng nút nhấn xuất hiện trên dòng trạng thái của một cửa sổ hoặc của sổ ghi chép (notebook) - bằng cách nhấn vào biểu tượng Health Beacon, điều khiển ngay lập tức được chuyển cho Trung tâm sức khỏe (Health Center - mà bạn sẽ xem xét trong phần tiếp theo), nơi bạn có thể nhận được các thông tin bổ sung về các báo hiệu (và các khuyến cáo để giải quyết tình hình đã gây ra các báo nguy ấy).
Trung tâm sức khỏe hệ thống (Health Center)
Trung tâm sức khỏe hệ thống là một công cụ GUI được thiết kế để tương tác với các trình giám sát sức khỏe hệ thống. Hình 2 là hình ảnh của Trung tâm sức khỏe hệ thống khi nó được kích hoạt lần đầu tiên trên một hệ thống Windows XP (trong trường hợp này chưa có cảnh báo nào được tạo ra).
Hình 2. Trung tâm sức khỏe hệ thống
Giống như nhiều công cụ GUI được cung cấp cùng với DB2 9, Trung tâm sức khỏe hệ thống gồm có một ô các đối tượng (ở phía bên trái của màn hình Trung tâm sức khỏe hệ thống) và một ô các nội dung (ở phía bên phải của Trung tâm sức khỏe hệ thống). Những ô này hiển thị các thông tin khác nhau về tình trạng sức khỏe hệ thống, bao gồm:
- Trạng thái của môi trường cơ sở dữ liệu. Một biểu tượng nằm ở bên cạnh mỗi đối tượng được hiển thị tại ô các đối tượng xác định mức cảnh báo cao nhất đã sinh ra dành cho đối tượng (hoặc dành cho bất kỳ đối tượng nào do nó quản lý). Biểu tượng hình thoi màu xanh bên cạnh đối tượng có nghĩa là đối tượng này và bất kỳ đối tượng nào dưới sự kiểm soát của nó chưa đưa ra bất kỳ cảnh báo nào. Bạn có thể sử dụng các nút bật/tắt ở trên đỉnh của ô các đối tượng để lọc cảnh báo theo mức độ nghiêm trọng của chúng.
- Cảnh báo được tạo ra cho một cá thể hay một cơ sở dữ liệu. Khi bạn chọn một đối tượng tại cây điều hướng trong ô các đối tượng, các cảnh báo cho đối tượng này được hiển thị trong ô nội dung ở bên phải.
- Các thông tin cảnh báo chi tiết và các hành động khuyến cáo nên dùng. Khi bạn nhấn đúp chuột lên bất kỳ cảnh báo nào được hiển thị trong ô nội dung, một sổ ghi chép (notebook) có chứa các thông tin chi tiết về cảnh báo xuất hiện. Trang đầu tiên của sổ ghi chép này có chứa các chi tiết về cảnh báo; trang thứ hai chứa danh sách các hành động được khuyến cáo nên làm theo để giải quyết các cảnh báo. Trong hầu hết trường hợp, bạn có thể thực hiện một trong số các hành động khuyên dùng trực tiếp ngay từ sổ ghi chép. Ví dụ, nếu hành động được khuyên dùng là tạo ra một thay đổi đối với trình quản lý cơ sở dữ liệu DB2 hoặc đối với cấu hình của cơ sở dữ liệu, thì Trung tâm sức khỏe hệ thống hiển thị các giá trị cấu hình mới cùng với một nút mà bạn có thể nhấn lên để tạo thay đổi. Trong các trường hợp khác, Trung tâm sức khỏe hệ thống có thể khuyên bạn nên tiếp tục điều tra vấn đề bằng cách sử dụng một công cụ, chẳng hạn như trình xử lý dòng lệnh (CLP) hay trình trực quan bộ nhớ (Memory Visualizer).
Bạn có thể kích hoạt Trung tâm sức khỏe hệ thống bất cứ lúc nào
bằng cách chọn một hành động của Trung tâm sức khỏe hệ thống từ trình
đơn Tools của một công cụ GUI DB2 9 khác, hoặc bằng cách chọn biểu
tượng thích hợp từ thanh công cụ của một công cụ GUI khác của DB2 9,
hoặc bằng cách thi hành lệnh
db2hc từ CLP.
Trên hệ thống Windows, bạn cũng có thể kích hoạt Trung tâm sức khỏe hệ
thống bằng cách nhấn vào nút Start và chọn Start >
Programs > IBM DB2 > Monitoring Tools > Health
Center.
Lưu ý: DB2 9 chứa một công cụ được gọi là Trung tâm sức khỏe hệ thống Web, bao gồm tất cả các khả năng của Trung tâm sức khỏe hệ thống và bổ sung thêm khả năng truy cập thông tin giám sát sức khỏe hệ thống một cách trực tiếp từ một trình duyệt web hoặc từ PDA.
Kích hoạt các chỉ báo tình trạng sức khỏe hệ thống và xác định các hành động sự kiện
Từ Trung tâm sức khỏe hệ thống, bạn có thể chọn cá thể (trình quản lý cơ sở dữ liệu) và các đối tượng cơ sở dữ liệu mà bạn muốn giám sát, tùy chỉnh các thiết lập ngưỡng của bất kỳ chỉ báo sức khỏe hệ thống nào, chỉ định các thông báo sẽ được gửi đến đâu và định nghĩa hành động nào sẽ được thực hiện nếu một cảnh báo được phát ra. Theo mặc định, hầu hết các chỉ báo về sức khỏe hệ thống chưa được kích hoạt khi trình giám sát sức khỏe hệ thống được cài đặt. Để kích hoạt chỉ báo sức khỏe hệ thống hoặc thay đổi các giá trị ngưỡng của một chỉ báo sức khỏe hệ thống, trước tiên bạn phải truy cập vào cửa sổ cấu hình cho chỉ báo tình trạng sức khỏe của đối tượng của Trung tâm sức khỏe hệ thống, được minh họa tại hình 3.
Hình 3. Cửa sổ cấu hình cho chỉ báo tình trạng sức khỏe của đối tượng
Để kích hoạt một chỉ báo sức khỏe hệ thống, bạn chỉ cần nhấn đúp chuột vào chỉ báo sức khỏe hệ thống thích hợp tại cửa sổ cấu hình cho chỉ báo tình trạng sức khỏe của đối tượng và khi cửa sổ cấu hình chỉ báo sức khỏe hệ thống hiển thị, như thấy trong hình 4, bạn nhấn chọn hộp Evaluate.
Hình 4. Cửa sổ Configure Health Indicator
Bằng cách sử dụng cửa sổ cấu hình chỉ báo sức khỏe hệ thống, bạn cũng có thể xác định hành động nào sẽ được thực hiện khi ngưỡng giới hạn cho một chỉ báo tình trạng sức khỏe bị vượt quá. Hình 5 cho thấy cửa sổ định cấu hình chỉ báo sức khỏe và các trường được sử dụng để xác định các hành động sẽ được thực hiện khi các cảnh báo khác nhau được sinh ra.
Hình 5. Cửa sổ cấu hình chỉ báo sức khỏe hệ thống
Phân tích SQL với tiện ích giải nghĩa
Tiện ích giải nghĩa là gì ?
Khi một câu lệnh SQL được gửi đến máy cơ sở dữ liệu DB2 để xử lý, nó được phân tích bởi Trình tối ưu hoá của DB2 để tạo ra cái được gọi là là kế hoạch truy cập. Mỗi kế hoạch truy cập chứa các thông tin chi tiết về chiến lược sẽ được sử dụng để thi hành các câu lệnh (chẳng hạn như có sử dụng hay không sử dụng các chỉ mục, sẽ yêu cầu phương pháp sắp xếp nào, nếu có, những khóa nào là cần thiết, và các phương pháp nối (join) nào, nếu có, sẽ được sử dụng). Nếu câu lệnh SQL được mã hóa trong một ứng dụng, thì kế hoạch truy cập được tạo ra vào thời điểm tiền biên dịch (hoặc tại thời điểm kết buộc nếu áp dụng phương thức kết buộc muộn) và một dạng kế hoạch truy cập có thể thi hành được đã sinh ra sẽ được lưu trữ trong danh mục hệ thống như một đối tượng được biết đến như là một gói. Tuy nhiên, nếu câu lệnh được gửi lên từ CLP hoặc nếu câu lệnh là một câu lệnh SQL động trong một chương trình ứng dụng (nói cách khác, một câu lệnh SQL được xây dựng vào thời gian chạy ứng dụng), thì kế hoạch truy cập được tạo ra ở thời điểm mà câu lệnh được phát ra và dạng sẵn sàng chạy được đã sinh ra sẽ được lưu trữ tạm thời trong bộ nhớ (trong bộ nhớ sẵn của gói tổng thể) thay vì ở trong các danh mục hệ thống. (Nếu một câu lệnh SQL được phát ra và dạng sẵn sàng chạy được của kế hoạch truy cập của nó đã tồn tại trong bộ nhớ sẵn của gói tổng thể, thì kế hoạch truy cập hiện tại được tái sử dụng và trình tối ưu hoá của DB2 không được gọi ra lần nữa.)
Tại sao điều này lại quan trọng? Bởi vì, mặc dù trình giám sát hệ thống cơ sở dữ liệu và trình giám sát sức khỏe hệ thống có thể được sử dụng để lấy được thông tin để biết một số lệnh SQL thực hiện tốt (hoặc tồi tệ) như thế nào, chúng không thể được sử dụng để phân tích các câu lệnh SQL riêng lẻ. Để thực hiện loại phân tích này, bạn phải có khả năng thu giữ và xem các thông tin được lưu trữ trong kế hoạch truy cập của một câu lệnh SQL. Và để thu giữ và xem thông tin về kế hoạch truy cập, bạn phải sử dụng tiện ích giải nghĩa của DB2 9.
Tiện ích giải nghĩa cho phép bạn thu giữ và xem thông tin chi tiết về kế hoạch truy cập đã được chọn cho một câu lệnh SQL cụ thể, cũng như các thông tin về hiệu năng có thể được sử dụng để giúp nhận biết các câu lệnh viết kém hoặc các yếu kém trong thiết kế cơ sở dữ liệu. Cụ thể là dữ liệu giải nghĩa sẽ giúp bạn hiểu cách mà trình quản lý cơ sở dữ liệu của DB2 truy cập vào bảng và các chỉ mục để đáp ứng một truy vấn. Dữ liệu giải nghĩa cũng có thể được sử dụng để đánh giá bất kỳ hành động điều chỉnh hiệu năng nào. Trong thực tế, bất cứ lúc nào bạn thay đổi một số phương diện của trình quản lý cơ sở dữ liệu của DB2, của câu lệnh SQL, hoặc của cơ sở dữ liệu mà câu lệnh tương tác với nó, thì bạn nên thu thập và xem xét dữ liệu giải nghĩa để tìm hiểu xem các thay đổi của bạn đã có tác động như thế nào đối với hiệu năng.
Các bảng giải nghĩa
Trước khi các thông tin giải nghĩa có thể được thu giữ, thì một tập hợp đặc biệt các bảng, được gọi là các bảng giải nghĩa, phải được tạo ra. Trong bảng 4 bạn có thể xem từng bảng giải nghĩa được sử dụng, cùng với các thông tin mà nó được thiết kế để lưu giữ.
Bảng 4. Các bảng giải nghĩa
Thông thường, các bảng giải nghĩa được sử dụng trong một cơ sở dữ liệu phát triển để giúp đỡ trong thiết kế ứng dụng, chứ không phải trong cơ sở dữ liệu sản xuất, ở đây mã ứng dụng vẫn còn khá tĩnh. Do vậy, chúng không được tạo ra cùng với các bảng danh mục hệ thống như là một phần của quá trình tạo cơ sở dữ liệu. Thay vào đó, bảng giải nghĩa phải được tạo ra một cách thủ công trong cơ sở dữ liệu sẽ sử dụng tiện ích giải nghĩa trước khi tiện ích giải nghĩa có thể được sử dụng. May mắn thay, quá trình được áp dụng để tạo ra các bảng giải nghĩa khá đơn giản: bằng cách sử dụng CLP, bạn thiết lập kết nối đến các cơ sở dữ liệu phù hợp và thi hành một kịch bản lệnh có tên là EXPLAIN.DDL, kịch bản lệnh này có thể được tìm thấy trong thư mục con "misc" của thư mục “sqllib” nơi mà các phần mềm DB2 9 được cài đặt ban đầu. (Các lời chú thích trong phần đầu của tệp tin này cung cấp các thông tin về cách thi hành nó.)
Thu thập dữ liệu giải nghĩa
Tiện ích giải nghĩa bao gồm một số công cụ riêng lẻ và không phải tất cả các công cụ đều yêu cầu cùng một loại dữ liệu giải nghĩa. Do đó, hai kiểu dữ liệu giải nghĩa khác nhau có thể được thu thập:
- Dữ liệu giải nghĩa toàn diện. Chứa thông tin chi tiết về kế hoạch truy cập của một câu lệnh SQL. Thông tin này được lưu trữ trên nhiều bảng giải nghĩa khác nhau.
- Dữ liệu chụp nhanh giải nghĩa . Chứa biểu diễn nội bộ hiện thời của một câu lệnh SQL, cùng với bất kỳ thông tin liên quan nào. Thông tin này được lưu trữ trong cột SNAPSHOT của bảng giải nghĩa EXPLAIN_STATEMENT.
Như bạn có thể hình dung, có nhiều cách khác nhau để có thể thu thập cả hai loại dữ liệu giải nghĩa đó. Các phương thức có sẵn để thu thập dữ liệu giải nghĩa bao gồm:
- Thi hành câu lệnh SQL
EXPLAIN
- Thiết lập mục đăng ký đặc biệt
CURRENT EXPLAIN MODE
- Thiết lập mục đăng ký đặc biệt
CURRENT EXPLAIN SNAPSHOT
- Sử dụng tùy chọn kết buộc
EXPLAINvới lệnh
PRECOMPILEhoặc
BIND
- Sử dụng tùy chọn kết buộc
EXPLSNAPvới lệnh
PRECOMPILEhoặc
BIND
Câu lệnh SQL EXPLAIN
Một cách để thu thập cả thông tin giải nghĩa toàn diện lẫn dữ liệu chụp
nhanh giải nghĩa cho một câu lệnh SQL động, đơn lẻ là thi hành câu
lệnh SQL
EXPLAIN. Cú pháp cơ bản cho câu
lệnh này là:
EXPLAIN [ALL | PLAN | PLAN SELECTION] <FOR SNAPSHOT | WITH SNAPSHOT> FOR [SQLStatement]
ở đây SQLStatement là câu lệnh SQL mà dữ liệu giải nghĩa và/hoặc
dữ liệu chụp nhanh giải nghĩa được thu thập cho nó. (Các câu lệnh được
chỉ định phải là câu lệnh SQL hợp lệ:
INSERT,
UPDATE,
DELETE,
SELECT,
SELECT INTO,
VALUES hoặc
VALUES INTO.)
Nếu tùy chọn
FOR SNAPSHOT được chỉ rõ với
câu lệnh
EXPLAIN thì chỉ có các thông tin
chụp nhanh giải nghĩa được thu thập cho câu lệnh SQL động đã chỉ định.
Mặt khác, nếu thay vào đó, tùy chọn
WITH
SNAPSHOT được chỉ định cho câu lệnh trên, thì cả thông tin
giải nghĩa toàn diện lẫn dữ liệu chụp nhanh giải nghĩa được thu thập
cho câu lệnh SQL động đã chỉ định. Tuy nhiên, nếu không một tùy chọn
nào được sử dụng, thì chỉ có dữ liệu giải nghĩa toàn diện được thu
thập, không có dữ liệu chụp nhanh giải nghĩa nào được tạo ra.
Để thu thập cả dữ liệu giải nghĩa toàn diện lẫn thông tin chụp nhanh
giải nghĩa cho câu lệnh SQL
SELECT * FROM
DEPARTMENT, bạn thi hành câu lệnh
EXPLAIN sau:
EXPLAIN ALL WITH SNAPSHOT FOR SELECT * FROM DEPARTMENT
Mặt khác, để chỉ thu thập dữ liệu chụp nhanh giải nghĩa cho cùng câu
lệnh SQL trên, hãy thi hành câu lệnh
EXPLAIN sau:
EXPLAIN ALL FOR SNAPSHOT FOR SELECT * FROM DEPARTMENT
Và cuối cùng, để chỉ thu thập dữ liệu giải nghĩa toàn diện cho câu lệnh
SQL
SELECT * FROM DEPARTMENT, bạn thi hành
câu lệnh
EXPLAIN sau:
EXPLAIN ALL FOR SELECT * FROM DEPARTMENT
Điều quan trọng cần lưu ý là câu lệnh
EXPLAIN không thi hành câu lệnh SQL đã chỉ định, cũng
không hiển thị thông tin giải nghĩa thu thập được. Phải sử dụng các
công cụ tiện ích giải nghĩa khác để xem các thông tin thu thập được.
(Chúng ta sẽ xem xét các công cụ này ngay sau đây.)
Các mục đăng ký đặc biệt CURRENT EXPLAIN MODE và CURRENT EXPLAIN SNAPSHOT
Mặc dù câu lệnh SQL
EXPLAIN rất hữu ích khi
bạn muốn thu thập các thông tin giải nghĩa và/hoặc các thông tin chụp
nhanh giải nghĩa cho một câu lệnh SQL động, đơn lẻ, nếu có một số
lượng lớn các câu lệnh SQL cần phải được phân tích thì sử dụng câu
lệnh đó có thể trở nên rất tốn thời gian. Cách tốt hơn để thu thập
cũng các thông tin ấy cho nhiều câu lệnh SQL động là thiết lập một
hoặc cả hai mục đăng ký đặc biệt của tiện ích giải nghĩa được cung cấp
trước khi một nhóm các câu lệnh SQL động được thi hành. Sau đó, khi
câu lệnh được chuẩn bị để thi hành, các thông tin giải nghĩa và/hoặc
thông tin chụp nhanh giải nghĩa sẽ được thu thập cho từng câu lệnh
được xử lý. (Tuy nhiên bản thân câu lệnh có thể được hoặc không được
thi hành một khi các thông tin giải nghĩa và/hoặc thông tin chụp nhanh
giải nghĩa được thu thập.)
Hai mục đăng ký đặc biệt của tiện ích giải nghĩa được sử dụng theo cách
này là mục đăng ký
CURRENT EXPLAIN MODE và
CURRENT EXPLAIN SNAPSHOT. Mục đăng ký
đặc biệt
CURRENT EXPLAIN MODE được thiết
lập bằng cách sử dụng câu lệnh SQL
SET CURRENT
EXPLAIN MODE và mục đăng ký đặc biệt
CURRENT EXPLAIN SNAPSHOT được thiết lập bằng cách sử dụng
câu lệnh SQL
SET CURRENT EXPLAIN SNAPSHOT.
Cú pháp cơ bản cho câu lệnh SQL
SET CURRENT
EXPLAIN MODE là:
SET CURRENT EXPLAIN MODE <=> [NO | YES | EXPLAIN | REOPT | RECOMMEND INDEXES | EVALUATE INDEXES | RECOMMEND PARTITIONINGS | EVALUATE PARTITIONINGS]
Cú pháp cơ bản cho câu lệnh SQL
SET CURRENT EXPLAIN
SNAPSHOT SQL là:
SET CURRENT EXPLAIN SNAPSHOT <=> [YES | NO | EXPLAIN | REOPT]
Như bạn có thể hình dung, nếu cả hai mục đăng ký đặc biệt
CURRENT EXPLAIN MODE và
CURRENT EXPLAIN SNAPSHOT được đặt ở trạng thái
NO, thì tiện ích giải nghĩa bị vô hiệu hóa và
ta không thu giữ được dữ liệu giải nghĩa. Mặt khác, nếu một trong hai
mục đăng ký đặc biệt được đặt là
EXPLAIN,
thì tiện ích giải nghĩa được kích hoạt và thông tin giải nghĩa toàn
diện hoặc dữ liệu chụp nhanh giải nghĩa (hoặc cả hai nếu cả hai mục
đăng ký đặc biệt được thiết lập) được thu thập mỗi khi một câu lệnh
SQL động được chuẩn bị để thực thi. Tuy nhiên, bản thân câu lệnh không
được thi hành. Nếu một trong hai mục đăng ký đặc biệt được đặt ở trạng
thái YES, thì kết quả sẽ tương tự như khi một trong hai mục
đăng ký được đặt ở trạng thái
EXPLAIN với
một sự khác biệt đáng kể; các câu lệnh SQL động được thu thập các
thông tin giải nghĩa được thực hiện ngay khi các dữ liệu giải nghĩa
hoặc chụp nhanh giải nghĩa thích hợp được thu thập.
Nếu một trong hai mục đăng ký đặc biệt
CURRENT
EXPLAIN MODE hoặc
CURRENT EXPLAIN
SNAPSHOT được thiết lập là
REOPT
thì tiện ích giải nghĩa được kích hoạt và thông tin giải nghĩa hoặc dữ
liệu chụp nhanh giải nghĩa (hoặc cả hai nếu cả hai mục đăng ký đặc
biệt được thiết lập) sẽ được thu thập bất cứ khi nào một câu lệnh SQL
tĩnh hoặc động được xử lý trong giai đoạn tái tối ưu hóa câu lệnh
trong thời gian thi hành; tức là, khi giá trị hiện tại cho các biến
chủ chứa, các mục đăng ký đặc biệt, hoặc các đánh dấu tham số sử dụng
trong câu lệnh đã sẵn sàng.
Các tuỳ chọn EXPLAIN và EXPLSNAP khi kết buộc hoặc tiền biên dịch
Cho đến đây, bạn đã xem xét các cách mà thông tin giải nghĩa toàn diện
và dữ liệu chụp nhanh giải nghĩa có thể được thu thập cho các câu lệnh
SQL động. Nhưng thông thường các ứng dụng cơ sở dữ liệu bao gồm các
câu lệnh SQL tĩnh cũng cần phải được phân tích. Vậy làm thế nào bạn có
thể sử dụng các tiện ích giải nghĩa để phân tích các câu lệnh SQL tĩnh
được mã hóa trong một ứng dụng SQL nhúng? Để thu thập các thông tin
giải nghĩa toàn diện và/hoặc các dữ liệu chụp nhanh giải nghĩa cho các
câu lệnh SQL tĩnh và/hoặc động được mã hóa trong một ứng dụng SQL
nhúng, thì bạn dựa vào các tuỳ chọn
EXPLAIN
và
EXPLSNAP khi kết buộc hoặc tiền biên
dịch.
Như bạn có thể hình dung, tuỳ chọn
EXPLAIN
khi kết buộc/tiền biên dịch được sử dụng để kiểm soát việc có thu thập
hay không thu thập các dữ liệu giải nghĩa toàn diện cho các câu lện
SQL tĩnh và/hoặc động được mã hóa trong một ứng dụng SQL nhúng. Tương
tự như vậy, tuỳ chọn
EXPLSNAP khi kết
buộc/tiền biên dịch kiểm soát việc có thu thập hay không thu thập các
dữ liệu chụp nhanh giải nghĩa. Một hoặc cả hai tùy chọn này có thể
được chỉ rõ như là một phần của lệnh
PRECOMPILE được sử dụng để tiền biên dịch tệp mã nguồn có
chứa các câu lệnh SQL nhúng. Nếu sử dụng kết buộc muộn, thì các tùy
chọn này có thể được cung cấp với lệnh
BIND
được sử dụng để kết buộc tệp tin kết buộc của ứng dụng với cơ sở dữ
liệu.
Cả hai tùy chọn
EXPLAIN và tùy chọn
EXPLSNAP có thể được gán giá trị
NO,
YES,
ALL hoặc
REOPT.
Nếu cả hai tùy chọn được gán giá trị
NO (Ví
dụ:
EXPLAIN NO EXPLSNAP NO), thì tiện ích
giải nghĩa bị vô hiệu hóa và ta không thu thập được dữ liệu giải
nghĩa. Mặt khác, nếu một trong hai tùy chọn được gán giá trị
YES, thì tiện ích giải nghĩa được kích hoạt
và thông tin giải nghĩa toàn diện hoặc dữ liệu chụp nhanh giải nghĩa
(hoặc cả hai loại thông tin này nếu cả hai tùy chọn được thiết đặt)
được thu thập cho mỗi câu lệnh SQL tĩnh có trong ứng dụng. Nếu một
trong hai tùy chọn được gán giá trị
ALL,
thì tiện ích giải nghĩa được kích hoạt và và thông tin giải nghĩa toàn
diện hoặc dữ liệu chụp nhanh giải nghĩa (hoặc cả hai loại thông tin
này nếu cả hai tùy chọn được thiết đặt) được thu thập cho mọi câu lệnh
SQL tĩnh và mọi câu lệnh SQL động được tìm thấy, ngay cả khi
các mục đăng ký đặc biệt
CURRENT EXPLAIN
MODE và/hoặc
CURRENT EXPLAIN
SNAPSHOT được gán giá trị
NO.
Nếu một trong hai tùy chọn
EXPLAIN hoặc
EXPLSNAP được gán giá trị
REOPT thì thông tin giải nghĩa hoặc dữ liệu
chụp nhanh giải nghĩa (hoặc cả hai nếu cả hai tùy chọn được chỉ định)
cho mỗi câu lệnh SQL kết buộc thêm dần, tái tối ưu hóa được sẽ được
đưa vào các bảng giải nghĩa trong thời gian chạy thi hành, ngay cả khi
các mục đăng ký đặc biệt
CURRENT EXPLAIN
MODE và/hoặc
CURRENT EXPLAIN
SNAPSHOT được thiết lập ở trạng thái
NO.
Đánh giá các dữ liệu giải nghĩa
Cho đến giờ bạn đã tập trung vào những cách thức khác nhau để có thể thu thập dữ liệu giải nghĩa toàn diện và dữ liệu chụp nhanh giải nghĩa. Nhưng một khi dữ liệu đã được thu thập, thì làm thế nào ta xem được chúng? Để trả lời câu hỏi này, bạn cần phải xem xét các công cụ của tiện ích giải nghĩa đã được thiết kế riêng để trình bày các thông tin giải nghĩa theo định dạng có ý nghĩa. Những công cụ này bao gồm:
db2expln
db2exfmt
- Visual Explain
db2expln
Trước đây bạn đã thấy rằng khi một tệp tin mã nguồn chứa câu lệnh SQL
nhúng được kết buộc tới một cơ sở dữ liệu (hoặc như là một phần của
quá trình tiền biên dịch hoặc trong thời gian kết buộc muộn), trình
tối ưu hoá của DB2 phân tích mỗi câu lệnh SQL tĩnh mà nó bắt gặp và
tạo ra một kế hoạch truy cập tương ứng, kế hoạch này sau đó sẽ được
lưu trong cơ sở dữ liệu ở dạng gói. Dựa vào tên của cơ sở dữ liệu, tên
của gói, ID của người tạo gói và số hiệu của phần (section) trong gói
(nếu số hiệu của phần được chỉ định là 0 thì tất cả các phần
của gói được xử lý), công cụ
db2expln diễn
giải và mô tả các thông tin về kế hoạch truy cập cho bất cứ gói nào
được lưu trữ trong danh mục hệ thống của một cơ sở dữ liệu. Vì công cụ
db2expln làm việc trực tiếp với một gói
chứ không làm việc với các dữ liệu giải nghĩa toàn diện hoặc dữ liệu
chụp nhanh giải nghĩa nên nó thường được sử dụng để lấy các thông tin
về các kế hoạch truy cập đã được chọn cho các gói mà dữ liệu giải
nghĩa chưa được thu thập. Tuy nhiên, do công cụ
db2expln chỉ có thể truy cập thông tin được lưu trữ trong
một gói, nên nó chỉ có thể mô tả việc triển khai thực hiện các kế
hoạch truy cập cuối cùng đã lựa chọn, nó không thể cung cấp thông tin
về cách một câu lệnh SQL cụ thể được tối ưu hoá như thế nào.
Bằng cách sử dụng các tham số đầu vào bổ sung, công cụ
db2expln cũng có thể được sử dụng để giải
nghĩa câu lệnh SQL động (không chứa các đánh dấu tham số).
db2exfmt
Không giống như công cụ
db2expln, công cụ
db2exfmt được thiết kế để làm việc trực
tiếp với dữ liệu giải nghĩa toàn diện hoặc dữ liệu chụp nhanh giải
nghĩa đã được thu thập và lưu trữ trong các bảng giải nghĩa. Dựa vào
tên của cơ sở dữ liệu và các thông tin đủ phân biệt khác, công cụ
db2exfmt truy vấn các bảng giải nghĩa
để lấy thông tin, định dạng các kết quả, và tạo báo cáo dạng văn bản
có thể hiển thị trực tiếp trên thiết bị đầu cuối hoặc được ghi vào một
tệp tin ASCII.
Giải nghĩa trực quan (Visual Explain)
Giải nghĩa trực quan (Visual Explain) là một công cụ GUI cung cấp cho các quản trị viên cơ sở dữ liệu và các nhà phát triển ứng dụng khả năng xem trình bày dưới dạng đồ họa của kế hoạch truy cập đã được chọn cho một câu lệnh SQL cụ thể. Ngoài ra, Giải nghĩa trực quan cho phép bạn:
- Xem các số liệu thống kê của cơ sở dữ liệu đã được sử dụng để tối ưu hóa các câu lệnh SQL.
- Xác định có sử dụng hay không sử dụng chỉ mục để truy cập dữ liệu bảng. (Nếu chỉ mục không được sử dụng, Giải nghĩa trực quan có thể giúp bạn xác định cột nào có thể được hưởng lợi từ việc lập chỉ mục.)
- Xem các tác động của việc tinh chỉnh hiệu năng bằng cách cho phép bạn thực hiện các phép so sánh "trước khi tinh chỉnh" và "sau khi tinh chỉnh".
- Lấy thông tin chi tiết về từng hoạt động được thực hiện theo kế hoạch truy cập, bao gồm cả chi phí ước tính của mỗi hoạt động.
Tuy nhiên, Giải nghĩa trực quan chỉ có thể được sử dụng để xem dữ liệu
chụp nhanh giải nghĩa; để xem dữ liệu giải nghĩa đã được thu thập và
được ghi vào các bảng giải nghĩa, ta phải sử dụng công cụ
db2exfmt thay thế cho công cụ Giải nghĩa trực
quan.
Như bạn có thể thấy, các công cụ khác nhau sẵn có để hiển thị thông tin giải nghĩa toàn diện và dữ liệu chụp nhanh giải nghĩa khác nhau rất nhiều, kể cả về độ phức tạp của chúng cũng như các khả năng mà chúng cung cấp. Bảng 5 tổng kết các công cụ khác nhau có sẵn, và nêu bật lên các đặc trưng cá nhân của chúng. Để tận dụng tốt nhất tiện ích giải nghĩa, bạn nên xem xét môi trường của bạn và nhu cầu của bạn khi quyết định sử dụng công cụ nào.
Bảng 5. So sánh các công cụ tiện ích giải nghĩa có sẵn
Giải nghĩa trực quan - Xem xét kỹ hơn
Timerons và dịch câu lệnh SQL
Timerons
Điều quan trọng nhất mà bạn cần phải hiểu để phân tích thông tin giải nghĩa là khái niệm timeron. Timeron là một đơn vị đo lường được sử dụng bởi trình tối ưu hoá của DB2 để tính toán số lượng thời gian và nguồn tài nguyên mà một truy vấn sẽ dùng để hoàn thành thực thi. Timeron là một tổ hợp của thời gian, lượng sử dụng CPU, số lần vào/ra ổ đĩa và một vài yếu tố khác. Do có sự thay đổi của các giá trị của tham số này, nên số lượng timerons cần thiết để thực thi một truy vấn là luôn biến động và có thể thay đổi từ lần thi hành này đến lần thi hành khác.
Timeron cũng là một đơn vị đo lường được phát minh ra; do đó không có một công thức nào có thể được dùng để chuyển dịch số timerons cần thiết để thi hành một truy vấn thành thời lượng tính bằng giây. Trừ điều đó, timerons có thể giúp bạn xác định liệu một tuyến đường thực thi truy vấn có nhanh hơn các tuyến đường khác hay không. (Bạn đừng lo lắng nếu số lượng timerons cần sử dụng để thi hành một truy vấn biến động sai lệch đến mười hoặc hai mươi giữa các lần biên dịch, điều này có thể dễ dàng xảy ra do những thay đổi trong sự hoạt động CPU, hoạt động của ổ đĩa, hoặc trong việc sử dụng cơ sở dữ liệu.)
Dịch câu lệnh SQL
Trước khi bất kỳ lệnh SQL nào có thể được thi hành đối với một cơ sở dữ liệu, thì trước tiên nó phải được chuẩn bị. Trong quá trình chuẩn bị này câu lệnh SQL được rút gọn thành một câu lệnh đại số mà trình tối ưu của DB2 sau đó có thể phân tích được. Câu lệnh đại số này được gọi là mô hình đồ thị truy vấn (query graph model), và quá trình tối ưu hóa sẽ làm việc với nó suốt thời gian. Hình 6 cho thấy các giai đoạn tối ưu hóa và phân tích cú pháp mà một truy vấn SQL phải trải qua, trước khi nó có thể được thực thi.
Hình 6. Quá trình dịch câu lệnh SQL
Kết quả đầu ra cuối cùng của quá trình tối ưu hóa là một kế hoạch truy cập. Kế hoạch truy cập là tuyến đường và các bước mà DB2 sử dụng để thực thi các câu lệnh SQL. Đây chính là thông tin mà tất cả các công cụ giải nghĩa sẵn có sẽ hiển thị. Thoạt đầu, kế hoạch truy cập tỏ ra khá phức tạp. Nhưng qua thực tế, bạn sớm phát hiện ra rằng chúng thực sự rất dễ đọc và phân tích.
Kích hoạt công cụ Giải nghĩa trực quan
Bất cứ khi nào dữ liệu giải nghĩa toàn diện và/hoặc dữ liệu chụp nhanh giải nghĩa được thu thập, thì thông tin về cách thức và thời gian thu thập dữ liệu được ghi lại trong bảng giải nghĩa EXPLAIN_INSTANCE. Thông tin này có thể xem được bất kỳ lúc nào tại cửa sổ Lịch sử câu lệnh được giải nghĩa (Explained Statement History). Cửa sổ Lịch sử câu lệnh được giải nghĩa được kích hoạt bằng cách chọn cơ sở dữ liệu thích hợp trong Trung tâm điều khiển (Control Center) và chọn Selected > Show Explained Statement History từ trình đơn của Trung tâm điều khiển. Hình 7 là hình của cửa sổ Lịch sử câu lệnh được giải nghĩa khi dữ liệu chụp nhanh giải nghĩa được thu thập cho một câu lệnh SQL.
Hình 7. Cửa sổ Lịch sử câu lệnh được giải nghĩa
Một khi cửa sổ Lịch sử câu lệnh được giải nghĩa đã được mở ra, thì công cụ Giải nghĩa trực quan (Visual Explain) có thể được sử dụng để phân tích các dữ liệu chụp nhanh giải nghĩa đã thu thập cho bất cứ bản ghi nào đã hiện ra bằng cách chọn bản ghi đó và chọn Statement > Show Access Plan từ trình đơn chính của cửa sổ Lịch sử câu lệnh được giải nghĩa. Hình 8 là hình của cửa sổ Kế hoạch truy cập (Access Plan) đã được tạo ra bằng cách thức này cho truy vấn sau đây (truy vấn này đã chạy với cơ sở dữ liệu SAMPLE được cung cấp cùng với DB2):
SELECT * FROM EMPLOYEE, DEPARTMENT WHERE WORKDEPT=DEPTNO
Hình 8. Cửa sổ đồ thị kế hoạch truy cập
Dữ liệu chụp nhanh giải nghĩa có thể luân phiên được thu thập cho một truy vấn mới và kế hoạch truy cập tương ứng có thể được hiển thị bằng cách chọn Statement > Explain Query... từ trình đơn chính của cửa sổ Lịch sử câu lệnh được giải nghĩa. Khi các mục của trình đơn này được chọn, thì cửa sổ Giải nghĩa câu lệnh truy vấn (Explain Query Statement) sẽ mở ra và sẽ nhắc bạn nhập vào văn bản câu lệnh truy vấn của bạn. Hình 9 là hình của cửa sổ Giải nghĩa câu lệnh truy vấn sau khi nó đã được điền một truy vấn đơn giản.
Hình 9. Cửa sổ Giải nghĩa câu lệnh truy vấn
Có thể nhấn vào mỗi thành phần của kế hoạch truy cập được hiển thị tại cửa sổ đồ thị kế hoạch truy cập (Access Plan Graph) để phát hiện thông tin chi tiết hơn về thành phần đó. Ví dụ: nếu toán tử HSJOIN(3) trong kế hoạch truy cập được hiển thị tại hình 8 được chọn, thì thông tin chi tiết như tại hình 10 có thể được hiển thị tại cửa sổ chi tiết của toán tử.
Hình 10. Cửa sổ chi tiết của toán tử
Khi phân tích một kế hoạch truy cập để định vị những điểm tắc nghẽn trong khi thực hiện, bạn nên thử nhấn vào tất cả những kiểu đối tượng khác nhau để quen dần với các thông tin truy vấn mà bạn có sẵn.
Các thành phần của công cụ Giải thích trực quan
Bạn có thể thấy rằng kết quả đầu ra được cung cấp tại cửa sổ Kế hoạch truy cập (xem hình 9) bao gồm một đồ thị phân cấp, biểu diễn nhiều thành phần khác nhau cần thiết để xử lý kế hoạch truy cập đã được chọn cho truy vấn đã chỉ định. Mỗi thành phần trong kế hoạch được trình bày dưới dạng một đối tượng đồ họa, gọi là nút (node). Có thể tồn tại hai loại nút:
- Toán tử. Nút toán tử được sử dụng để nhận diện hoặc một hành động phải được thực hiện trên dữ liệu, hoặc kết quả đầu ra được tạo ra từ một bảng hoặc từ một chỉ mục.
- Operand. Nút toán hạng được sử dụng để nhận diện một thực thể mà trên đó một hoạt động được thực hiện (ví dụ: một bảng sẽ là toán hạng của một toán tử quét bảng).
Toán hạng
Thông thường thì các nút toán hạng được sử dụng để nhận diện các bảng, các chỉ mục và hàng đợi của bảng (hàng đợi của bảng được sử dụng khi chế độ song song trong nội bộ phân đoạn được sử dụng), chúng được biểu diễn bằng ký hiệu trong đồ thị phân cấp là các hình chữ nhật (cho bảng), hình thoi (cho chỉ mục), và hình bình hành (cho hàng đợi của bảng). Bạn có thể xem các ví dụ về các toán hạng bảng và chỉ mục tại hình 11.
Hình 11. Bảng và các toán tử của chỉ mục
Các toán tử
Mặt khác, các nút toán tử được sử dụng để nhận diện bất cứ điều gì, từ một hoạt động chèn vào một chỉ mục hoặc hành động quét bảng. Các nút toán tử, được biểu diễn bằng ký hiệu trong đồ thị phân cấp là hình oval, cho biết cách dữ liệu được truy cập như thế nào, các bảng được nối (join) với nhau như thế nào và các nhân tố khác chẳng hạn như một hoạt động sắp xếp có được thực hiện hay không. Bảng 6 liệt kê các toán tử phổ biến nhất, có thể xuất hiện trong đồ thị phân cấp của kế hoạch truy cập.
Bảng 6. Các toán tử thường gặp trong công cụ giải nghĩa trực quan
Bạn có thể xem các ví dụ về một số toán hạng phổ biến tại hình 12. Trong ví dụ này, ba hành động khác nhau đang được thực hiện: Hai bảng đang được thực hiện quét bảng, một chỉ mục đang được quét, và hai bộ dữ liệu đang được nối với nhau bằng cách sử dụng thuật toán hashjoin.
Hình 12. Một số toán tử thông thường
Bộ nối và toán tử RETURN
Các mũi tên minh hoạ cách dữ liệu chảy từ một nút đến nút kế tiếp như thế nào, chúng nối tất cả các nút được hiển thị trong đồ thị phân cấp và thường thì một toán tử RETURN kết thúc tuyến đường này. Toán tử RETURN biểu diễn bộ kết quả cuối cùng được tạo ra và chứa các thông tin tóm tắt về truy vấn và những gì đang được trả về từ câu lệnh SQL đã hoàn thành. Giá trị của timeron được hiển thị với đối tượng RETURN biểu diễn tổng số đo độ dài của thời gian, được tính bằng timerons, cần thiết để hoàn thành truy vấn. Bạn có thể xem một ví dụ về toán tử RETURN tại hình 13.
Hình 13. Toán tử RETURN
Các nhân tố ảnh hưởng đến hiệu năng truy vấn
Cách thức mà một môi trường cơ sở dữ liệu được cấu hình và cấp độ tối ưu hóa câu truy vấn đã áp dụng để chuẩn bị một truy vấn có thể có tác động rất lớn lên cách thức mà truy vấn sẽ được chuẩn bị, cũng như cách truy vấn đó sẽ được thực thi như thế nào.
Các giá trị của tham số cấu hình
Công cụ giải nghĩa trực quan có thể nhanh chóng tóm tắt tất cả các tham số có ảnh hưởng đến biên dịch truy vấn và hiển thị chúng tại cửa sổ tóm tắt. Cửa sổ này được gọi là cửa sổ Các tham số tối ưu hóa (Optimization Parameters) và nó được gọi ra bằng cách chọn Statement > Show Optimization Parameters từ trình đơn chính của cửa sổ Đồ thị kế hoạch truy cập (Access Plan Graph). Hình 14 là hình của cửa sổ Các tham số tối ưu hóa khi nó được kích hoạt.
Hình 14. Cửa sổ Các tham số tối ưu hóa
Một số tham số cấu hình được hiển thị trong cửa sổ Các tham số tối ưu hóa bao gồm:
- AVG_APPLS (trung bình các ứng dụng): Tham số này cho biết số trung bình của các ứng dụng sẽ chạy tương tranh đối với cơ sở dữ liệu. DB2 sử dụng thông tin này để xác định không gian nhớ để sắp xếp và pool đệm sẽ được sử dụng nhiều đến mức nào và lượng không gian nhớ mà truy vấn nhiều khả năng sẽ sử dụng là bao nhiêu.
- SORTHEAP (heap sắp xếp): Heap sắp xếp là lượng không gian nhớ có sẵn trong bộ nhớ để thực hiện việc sắp xếp. Nếu việc sắp xếp đòi hỏi bộ nhớ nhiều hơn heap sắp xếp đang sẵn có, thì một phần của dữ liệu sắp xếp sẽ phải được chuyển tạm ra đĩa, (điều này có thể có tác động rất tiêu cực đến hiệu năng).
- LOCKLIST (danh sách khóa): Tham số cho biết lượng bộ nhớ có sẵn cho DB2 để lưu trữ thông tin về khóa cho mỗi ứng dụng. Nếu khoảng trống của danh sách khóa khá nhỏ, thì DB2 có thể phải leo thang thêm một số khóa để có khoảng trống cho tất cả các khóa đang được các ứng dụng nắm giữ.
- MAXLOCKS (tỷ lệ phần trăm tối đa của danh sách khóa): Tham số này kiểm soát số tỷ lệ phần trăm của tổng số khoảng trống trong danh sách khóa mà một ứng dụng có thể chiếm. Nếu một ứng dụng sử dụng bộ nhớ quá nhiều bởi vì có quá nhiều khóa được mở, thì DB2 sẽ leo thang thêm một số khóa để tạo thêm khoảng trống trong danh sách khóa.
- NUM_FREQVALUES (số lượng các giá trị của tần số): Số lượng
các giá trị của tần số được sử dụng bởi tiện ích Runstats DB2 để
kiểm soát xem số các giá trị mà DB2 sẽ lưu giữ thường xuyên nhất
trong bộ nhớ là bao nhiêu. Thông tin này được trình tối ưu hóa sử
dụng để xác định tỷ lệ phần trăm của toàn bộ tập kết quả mà một vị
từ trong mệnh đề
WHEREsẽ loại bỏ.
- NUM_QUANTILES (số lượng quantiles dữ liệu): Số lượng quantiles được sử dụng bởi tiện ích Runstats DB2 để kiểm soát xem bao nhiêu quantiles đang được thu giữ cho dữ liệu cột. Việc tăng số lượng quantiles sẽ cung cấp cho DB2 thêm thông tin về việc phân phối các dữ liệu trong cơ sở dữ liệu.
- DBHEAP (heap của cơ sở dữ liệu): Các heap cơ sở dữ liệu kiểm soát số lượng bộ nhớ có sẵn cho thông tin về đối tượng cơ sở dữ liệu. Các đối tượng này bao gồm các chỉ mục, các bảng, pool đệm và vùng bảng. Trình giám sát sự kiện và thông tin vùng đệm nhật ký cũng được lưu giữ ở đây.
- CPUSPEED (tốc độ của CPU): Tốc độ của CPU của máy tính. Nếu giá trị được thiết lập là -1, thì DB2 sử dụng chương trình đo tốc độ CPU để xác định giá trị thiết đặt thích hợp.
- BUFFPAGE và kích thước của pool đệm: Trình tối ưu hóa sử dụng kích thước của các pool đệm có sẵn trong các dữ liệu tối ưu hóa của nó. Việc tăng hoặc giảm kích thước của pool đệm có thể có một tác động đáng kể đến kế hoạch truy cập.
Mức tối ưu hóa được sử dụng
Yếu tố quan trọng nhất có thể ảnh hưởng đến cách thức sinh ra một kế hoạch truy cập cho một truy vấn được tạo ra như thế nào là mức tối ưu hóa được áp dụng để chuẩn bị kế hoạch truy vấn đó. Các thông tin này báo cho trình Tối ưu hóa của DB2 cần phải nỗ lực như thế nào và kỹ thuật nào nên được sử dụng để xác định kế hoạch truy vấn tốt nhất cần sử dụng để giải quyết các truy vấn. Mức độ tối ưu hóa cao hơn sẽ buộc trình tối ưu hóa phải sử dụng các thuật toán và phân tích đại số phức tạp hơn - và kết quả là ta sẽ mất thời gian nhiều hơn để tạo ra kế hoạch truy cập cuối cùng.
Đã có sẵn bảy lớp tối ưu hóa và mỗi lớp sử dụng một tập hợp con khác nhau của tất cả các quy tắc và các con số thống kê có sẵn. Các lớp tối ưu hóa có sẵn là:
- 0 -- Sử dụng lượng tối thiểu các tối ưu hóa
- 1 -- Sử dụng mức độ tối ưu hóa có thể so sánh với DB2/6000 phiên bản 1, cộng thêm một số tính năng chi phí thấp không có trong phiên bản 1
- 2 -- Sử dụng các tính năng tối ưu hóa mức 5, nhưng với một thuật toán nối đơn giản
- 3 -- Thực hiện một lượng các tối ưu hóa vừa phải; tương tự như các đặc trưng tối ưu hóa truy vấn của DB2 cho MVS/ESA
- 5 -- Sử dụng một lượng đáng kể các tối ưu hóa, áp dụng các quy tắc Heuristic (Nếu không chỉ định khác đi, thì đây là tối ưu hóa mặc định được sử dụng.)
- 7 -- Sử dụng một số lượng đáng kể các tối ưu hóa, không áp dụng quy tắc Heuristic
- 9 -- Sử dụng tất cả các kỹ thuật tối ưu hóa có sẵn
Các hướng dẫn sau đây có thể hữu ích khi bạn quyết định lớp tối ưu hóa tốt nhất mà bạn sẽ sử dụng:
- Sử dụng lớp tối ưu hóa 0 hay 1 cho các truy vấn yêu cầu tối ưu hóa rất ít và phụ thuộc rất nhiều vào việc tìm kiếm chỉ mục khóa chính hoặc các phép nối rất đơn giản (ví dụ: OLTP rất đơn giản).
- Sử dụng lớp tối ưu hóa 1 cho các truy vấn đơn giản liên quan đến một số ít các bảng và các phép nối liên quan đến chỉ mục trên các bảng (ví dụ: OLTP).
- Sử dụng lớp tối ưu hóa 5 cho một khối lượng công việc có liên quan đến các OLTP phức tạp hoặc báo cáo liên quan đến nhiều phép nối phức tạp trên nhiều bảng (ví dụ, hỗn hợp OLTP và báo cáo).
- Sử dụng lớp tối ưu hóa 9 cho các truy vấn yêu cầu các phân tích quan trọng về thống kê dữ liệu và có thể chạy trọng một thời gian dài (trên một phút) (ví dụ: khai phá dữ liệu rất phức tạp hoặc hỗ trợ quyết định). Trình tối ưu hóa của DB2 sẽ chạy lâu hơn để tạo ra một kế hoạch truy cập, nhưng các cải tiến mà có thể được tìm thấy trong kế hoạch truy cập thường có giá trị hơn thời gian bổ sung thêm cần thiết để tạo ra kế hoạch truy cập đó.
Các ý kiến cuối cùng về xử lý sự cố SQL
Trọn vẹn nhiều cuốn sách đã được viết về cách cải thiện hiệu năng SQL, nên ta không thể đề cập đến tất cả mọi thứ liên quan đến việc tinh chỉnh hiệu năng truy vấn ở bài hướng dẫn này. Tuy nhiên, có một vài điểm then chốt mà bạn nên ghi nhớ khi bạn bắt đầu sử dụng công cụ giải nghĩa trực quan để gỡ lỗi các truy vấn hoạt động kém:
Không sử dụng các chỉ mục. Đây có phải là các truy vấn đang sử dụng các chỉ mục mà bạn mong đợi? Bạn phải đảm bảo rằng việc quét bảng không xảy ra trên các bảng mà bạn nghĩ đã có các chỉ mục trên chúng. Câu hỏi này có thể dễ dàng được trả lời bằng cách nhìn vào biểu đồ kế hoạch truy cập cho truy vấn. Nếu các chỉ mục thực sự tồn tại, thì hãy kiểm tra số lượng hay thứ tự của các khóa chỉ mục. Nó có thể không phải là cái mà bạn mong đợi.
Kích cỡ của bảng và việc sử dụng toán tử
'SELECT *'. Đôi khi trình tối ưu hóa của DB2 sẽ
quyết định rằng sẽ nhanh hơn nếu quét toàn bộ một bảng do số lượng các
cột mà bạn lấy lại. Có lẽ bảng đó khá nhỏ, hoặc có lẽ không hiệu quả
nếu quét một chỉ mục và sau đó trả về một số lượng lớn các hàng, các
hàng này trả lại tất cả các cột của một bảng. Hãy cố gắng trả về chỉ
những cột mà bạn thực sự cần. Bạn hãy xem cột nào được trả lại trong
mỗi phần của truy vấn để xem bạn có thực sự cần chúng không và để xem
đây có phải là lý do để việc quét bảng xảy ra. Ngoài ra, hãy xem xét
việc bao hàm thêm các cột vào trong một chỉ mục.
Thiết lập mức độ tối ưu hóa quá thấp. Nhiều quản trị viên cơ sở dữ liệu hạ thấp mức tối ưu hóa xuống 1 để giảm bớt lượng thời gian cần thiết để chuẩn bị truy vấn. Đôi khi, nâng mức tối ưu hóa lên 5 sẽ cho phép trình tối ưu hóa tìm một kế hoạch truy cập tốt hơn mà không phải tạo ra một chỉ mục mới để cải thiện hiệu năng. Giá trị này có thể dễ dàng được điều chỉnh trong công cụ Giải nghĩa trực quan khi bạn chọn để tạo ra thông tin giải nghĩa cho một truy vấn bằng cách sử dụng cửa sổ Giải nghĩa câu lệnh truy vấn (xem hình 9). Giá trị này dũng có thể được thiết đặt từ CLP bằng cách thi hành lệnh sau:
SET CURRENT QUERY OPTIMIZATION [0|1|2|3|5|7|9]
Các công cụ khác để xác định vấn đề
Tiện ích db2mtrk
Bạn đã thấy các công cụ có thể được sử dụng để xem xét tình trạng của
cơ sở dữ liệu tại một thời điểm cụ thể (trình giám sát chụp nhanh),
thu thập dữ liệu bất cứ khi nào một sự kiện cụ thể hoặc giao dịch xảy
ra (các trình giám sát sự kiện), xem xét kế hoạch truy cập dữ liệu
được tạo ra để trả lời các truy vấn (giải nghĩa). Có hai công cụ mà
bạn cần phải biết nếu bạn đang cố gắng xác định vấn đề trong môi
trường cơ sở dữ liệu của mình. Công cụ đầu tiên trong số này được gọi
là tiện ích
db2mtrk.
Tiện ích
db2mtrk được thiết kế để cung cấp
một báo cáo đầy đủ về tình trạng bộ nhớ dành cho các cá thể (trình
quản lý cơ sở dữ liệu), các cơ sở dữ liệu và các tác tử. Khi được thực
hiện, lệnh
db2mtrk tạo ra các thông tin sau
về việc cấp phát pool bộ nhớ:
- Kích thước hiện tại
- Kích thước tối đa (giới hạn cứng)
- Kích thước lớn nhất (high water mark)
- Loại pool (mã định danh biểu thị chức năng mà pool bộ nhớ sẽ phục vụ)
- Tác tử đã cấp phát pool (nếu pool bộ nhớ là riêng tư)
Tiện ích
db2mtrk được gọi ra bằng cách thi
hành lệnh
db2mtrk. Cú pháp cơ bản cho lệnh
này là:
db2mtrk <-i> <-d> <-p> <-m | -w> <-r [Interval] <[Count]> > <-v> <-h>
ở đây Interval là số giây phải chờ giữa hai lần liên tiếp nhau gọi trình theo vết bộ nhớ của DB2 và Count là số lần lặp lại việc gọi trình theo vết bộ nhớ.
Cách thức mà tiện ích
db2mtrk thu thập và
trình bày các thông tin được xác định bởi các tùy chọn được chỉ rõ khi
gọi lệnh
db2mtrk. Bảng 7 liệt kê tất cả các
tùy chọn có sẵn và mô tả các hành vi của mỗi tùy chọn.
Bảng 7. Các tùy chọn có sẵn của lệnh db2mtrk
Nếu bạn muốn có các thông tin về việc cấp phát pool bộ nhớ ở mức cá
thể, mức cơ sở dữ liệu và mức riêng tư, thì bạn thực hiện lệnh
db2mtrk như sau:
db2mtrk -i -d -p
Và khi lệnh này được thực thi thì bạn có thể thấy một kết quả tương tự với kết quả đầu ra hiển thị bên dưới đây.
Ví dụ kết quả đầu ra tạo ra bởi tiện ích db2mtrk
Memory for instance monh other 320.0K 8.1M Memory for database: SAMPLE utilh pckcacheh catcacheh bph (1) bph (S32K) bph (S16K) bph (S8K) 64.0K 128.0K 64.0K 1.2M 704.0K 448.0K 320.0K bph (S4K) shsorth lockh dbh other 256.0K 0 320.0K 4.3M 128.0K Memory for agent 3632 other apph appctlh 64.0K 64.0K 64.0K Memory for agent 3184 other apph appctlh 64.0K 64.0K 64.0K Memory for agent 508 other apph appctlh 448.0K 64.0K 64.0K
Tiện ích db2pd
Tiện ích
db2pd được thiết kế để lấy ra các
thông tin từ các tập hợp thích hợp của bộ nhớ hệ thống cơ sở dữ liệu
DB2 và tạo ra một báo cáo toàn diện có thể được sử dụng để giám sát
và/hoặc gỡ lỗi cho một hệ thống cơ sở dữ liệu (hoặc bất cứ thành phần
nào của hệ thống cơ sở dữ liệu). Tiện ích
db2pd được gọi ra bằng cách thực hiện lệnh
db2pd. Hình thái đơn giản nhất của lệnh này
là:
db2pd <-inst> <-database [DatabaseName] ,... | -alldatabases> <-everything> <-full>
ở đây DatabaseName là tên được gán cho một hoặc nhiều cơ sở dữ liệu mà ta muốn lấy được thông tin về chúng.
Nếu lệnh
db2pd được thi hành với tùy chọn
-everything, thì tiện ích
db2pd sẽ thu thập thông tin về tất cả các
phần tử của tất cả các cơ sở dữ liệu trên tất cả các máy chủ phân đoạn
cơ sở dữ liệu mà là nội bộ với máy chủ. Nếu tùy chọn
-full được sử dụng, thì thông tin được tạo ra
sẽ được mở rộng tới độ dài tối đa của nó. (Nếu tùy chọn này không được
chỉ định, thì thông tin được tạo ra được cắt xén để tiết kiệm chỗ khi
hiển thị.)
Ngoài việc thu thập một lượng lớn các thông tin cho hệ thống cơ sở dữ
liệu, bạn có thể ra lệnh cho tiện ích
db2pd
tập trung vào thu thập thông tin về một khu vực cụ thể bằng cách chỉ
rõ bất kỳ một tùy chọn nào trong các tuỳ chọn lọc sau đây như là một
phần của lệnh
db2pd:
-applications
-fmp
-agents
-transactions
-bufferpools
-logs
-locks
-tablespaces
-dynamic
-static
-fcm
-memsets
-mempools
-memblocks
-dbmcfg
-dbcfg
-catalogcache
-sysplex
-tcbstats
-reorg
-recovery
-reopt
-osinfo
-storagepaths
-pages
Ví dụ: Nếu bạn muốn có các thông tin về các tệp nhật ký giao dịch kết
hợp với cơ sở dữ liệu SAMPLE, thì bạn có thể làm điều này bằng cách
thi hành câu lệnh
db2pd như sau:
db2pd -database SAMPLE -logs
Và khi lệnh này được thực thi thì bạn có thể thấy một kết quả tương tự với kết quả đầu ra hiển thị bên dưới.
Ví dụ kết quả đầu ra được tạo ra bởi tiện ích db2pd
Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:43:48 Logs: Current Log Number 0 Pages Written 0 Method 1 Archive Status n/a Method 1 Next Log to Archive n/a Method 1 First Failure n/a Method 2 Archive Status n/a Method 2 Next Log to Archive n/a Method 2 First Failure n/a Address StartLSN State Size Pages Filename 0x04BBD254 0x0000036B0000 0x00000000 1000 1000 S0000000.LOG 0x04BBD2F4 0x000003A98000 0x00000000 1000 1000 S0000001.LOG 0x04BBD394 0x000003E80000 0x00000000 1000 1000 S0000002.LOG
Trong một số trường hợp, khi một trong các tùy chọn lọc được sử dụng,
đến lượt nó tùy chọn lọc này lại có một tập hợp các tùy chọn riêng của
nó. Xin tham khảo mục Các tham khảo về lệnh DB2 để biết cú pháp hoàn
chỉnh cho lệnh
db2pd.
Tóm tắt
Hướng dẫn này được thiết kế để giới thiệu cho bạn một bộ các công cụ giám sát có sẵn với DB2 9 và chỉ cho cho bạn từng công cụ được sử dụng để giám sát hệ thống cơ sở dữ liệu của bạn hoạt động tốt (hoặc kém) như thế nào. Công tác giám sát cơ sở dữ liệu là một hoạt động sống còn, khi được thực hiện thường xuyên, sẽ cung cấp thông tin phản hồi liên tục về tình trạng sức khỏe của một hệ thống cơ sở dữ liệu. Bởi vì giám sát cơ sở dữ liệu là một phần không thể tách rời của công tác quản trị cơ sở dữ liệu như vậy, nên DB2 9 được trang bị một tiện ích giám sát được gọi là trình giám sát hệ thống cơ sở dữ liệu và mặc dù cái tên "trình giám sát hệ thống cơ sở dữ liệu" làm ta nghĩ đến một công cụ giám sát duy nhất, nhưng trong thực tế trình giám sát hệ thống cơ sở dữ liệu bao gồm hai công cụ khác nhau, có thể được sử dụng để thu giữ và trả lại thông tin giám sát hệ thống: một trình giám sát chụp nhanh và một hoặc nhiều trình giám sát sự kiện.
Trình giám sát chụp nhanh cho phép bạn chụp hình tình trạng của cơ sở dữ liệu tại một thời điểm cụ thể trong khi các trình giám sát sự kiện thu giữ và ghi nhật ký dữ liệu khi các sự kiện cụ thể của cơ sở dữ liệu xảy ra. Điều quan trọng cần lưu ý là do việc giám sát bổ sung thêm các tải công việc xử lý phụ, nên lượng thời gian dành cho việc giám sát một hệ thống nên được hạn chế, và việc giám sát nên luôn luôn được thực hiện với một mục đích cụ thể.
Với DB2 phiên bản 9, dữ liệu giám sát chụp nhanh cũng có thể thu được bằng cách sử dụng một bộ các thường trình SQL để truy cập dữ liệu được lưu giữ trong các khung nhìn quản trị đặc biệt.
Các trình giám sát sự kiện cung cấp cách để thu thập dữ liệu giám sát khi các sự kiện hoặc các hoạt động xảy ra mà ta không thể giám sát được bằng cách sử dụng trình chụp nhanh. Ngoài ra, trong khi trình giám sát chụp nhanh tồn tại như một tiến trình nền sau và bắt đầu thu thập các dữ liệu giám sát một khi một kết nối đến cơ sở dữ liệu được thiết lập, thì các trình giám sát sự kiện phải được tạo ra trước khi chúng có thể được sử dụng.
Bởi vì các trình giám sát sự kiện là các đối tượng cơ sở dữ liệu đặc
biệt, phải được tạo ra trước khi chúng có thể được sử dụng, nên chúng
chỉ có thể thu thập dữ liệu giám sát cho các sự kiện hoặc các bước
chuyển trạng thái diễn ra trong cơ sở dữ liệu mà chúng đã được định
nghĩa cho cơ sở dữ liệu ấy. Trình giám sát sự kiện không thể được sử
dụng để thu thập dữ liệu giám sát ở mức cá thể. Bạn có thể tạo các
trình giám sát sự kiện một cách trực tiếp từ Trung tâm điều khiển
(chọn mục Create Event Monitor từ trình đơn Event Monitors) hoặc bằng
cách thực hiện câu lệnh SQL
CREATE EVENT
MONITOR.
Trình giám sát sức khỏe bổ sung thêm khả năng quản lý theo ngoại lệ cho DB2 9 bằng cách báo hiệu cho các quản trị viên hệ thống các vấn đề tiềm tàng về tình trạng sức khỏe của hệ thống trước khi chúng trở thành các vấn đề thực sự, ảnh hưởng đến hiệu năng của hệ thống. Trình giám sát tình trạng sức khỏe hệ thống sử dụng các chỉ báo sức khỏe hệ thống để đánh giá một số khía cạnh cụ thể về hiệu năng của cá thể và của cơ sở dữ liệu. Mỗi chỉ báo tình trạng sức khỏe ấy hoạt động như một thước đo chính xác mà trình giám sát tình trạng sức khỏe kiểm tra liên tục để đo đạc tình trạng sức khỏe của một khía cạnh cụ thể của một lớp cụ thể các đối tượng cơ sở dữ liệu. Đến lượt chúng, các chỉ báo tình trạng sức khỏe đo lường một tập hữu hạn của các trạng thái của đối tượng phân biệt hoặc một dải liên tục các giá trị để xác định liệu một đối tượng cụ thể là "khỏe mạnh" hay "không khoẻ mạnh". Các chỉ báo tình trạng sức khỏe hệ thông có một tập hợp các giá trị ngưỡng định sẵn, và trình giám sát tình trạng sức khỏe thường xuyên so sánh các tình trạng của hệ thống với các ngưỡng đó - nếu nó thấy rằng một ngưỡng giới hạn cụ thể bị vượt quá hoặc phát hiện tình trạng bất thường của một đối tượng cụ thể, nó sẽ tự động cảnh báo thông qua các kênh báo cáo đã định.
Tiện ích giải nghĩa cho phép bạn thu giữ và xem các thông tin chi tiết về kế hoạch truy cập được chọn cho một lệnh SQL cụ thể, cũng như thông tin hiệu năng có thể được sử dụng để giúp xác định các câu lệnh viết kém hoặc các yếu kém trong việc thiết kế cơ sở dữ liệu. Cụ thể là các dữ liệu giải nghĩa sẽ giúp bạn hiểu cách mà trình quản lý cơ sở dữ liệu của DB2 truy cập các bảng và các chỉ mục để thỏa mãn một truy vấn. Dữ liệu giải nghĩa cũng có thể được sử dụng để đánh giá bất kỳ hành động tinh chỉnh hiệu năng nào. Trước khi các thông tin giải nghĩa có thể được thu thập, thì một tập hợp đặc biệt các bảng giải nghĩa phải được tạo ra.
Giải nghĩa trực quan (Visual Explain) là một công cụ GUI, cung cấp cho các quản trị viên cơ sở dữ liệu và các nhà phát triển ứng dụng khả năng xem các trình bày dưới dạng đồ họa của kế hoạch truy cập đã được chọn cho một câu lệnh SQL cụ thể.
Tuy nhiên, công cụ Giải nghĩa trực quan chỉ có thể được sử dụng để xem
dữ liệu chụp nhanh giải nghĩa; để xem dữ liệu giải nghĩa đã được thu
thập và được ghi vào các bảng giải nghĩa, bạn phải sử dụng công cụ
db2exfmt thay vào đó.
Tiện ích
db2mtrk được thiết kế để cung cấp
một báo cáo đầy đủ về tình trạng bộ nhớ dành cho các cá thể, các cơ sở
dữ liệu và các tác tử (agents).
Tiện ích
db2pd được thiết kế để lấy ra thông
tin từ các tập hợp bộ nhớ hệ thống cơ sở dữ liệu DB2 thích hợp và tạo
ra một báo cáo toàn diện có thể được sử dụng để giám sát và/hoặc gỡ
lỗi cho hệ thống cơ sở dữ liệu (hoặc bất cứ thành phần nào của hệ
thống cơ sở dữ liệu). Tiện ích
db2pd được
gọi ra bằng cách thực hiện câu lệnh
db2pd.
Tài nguyên
Học tập
- Thông tin tổng quan về DB2 9. Tìm thông tin về máy chủ dữ liệu mới, có bao gồm công nghệ pureXML® đã được cấp bằng sáng chế.
- Xem các phần khác của loạt bài hướng dẫn chuẩn bị cho kỳ thi 731 lấy chứng chỉ quản trị viên cơ sở dữ liệu DB2 9.
- Bạn có thể tìm hiểu thêm về việc giám sát DB2 từ Trung tâm Thông tin của DB2 9
- Để biết thêm thông tin về Chứng chỉ quản
trị cơ sở dữ liệu DB 2 9 cho Linux, UNIX và Windows (kỳ thi 731), hãy truy
cập các liên kết sau:
- Thông tin về đào tạo Quản lý thông tin
- Thông tin chung về các chứng chỉ -- gồm các gợi ý về các cuốn sách cần đọc, mục tiêu của kỳ thi và các khóa học.
Lấy sản phẩm và công nghệ
- Phiên bản dùng thử của DB2 9 đã có sẵn để tải về miễn phí.
- Tải về DB2 Express-C, phiên bản miễn phí của DB2 Express Edition cho cộng đồng, phiên bản này cung cấp cùng các tính năng dữ liệu cốt lõi 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.
Bình luận
-
Vùng dữ liệu trên developerWorks
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
Xem các bài viết về HTML, CSS, JavaScript,...
-
Điện toán đám mây
Tìm hiểu về điện toán đám mây

markdown:
## Trước khi bạn bắt đầu
### Về loạt bài hướng dẫn này
Nếu bạn đang chuẩn bị dự kỳ thi 731 lấy chứng chỉ quản trị cơ sở dữ
liệu (DBA) DB2, bạn đã đến đúng chỗ - đây là một kiểu phòng tự học.
[Loạt bảy bài hướng dẫn chuẩn bị lấy chứng chỉ DB2](http://www.ibm.com/developerworks/vn/views/data/libraryview.jsp ?search_by=Chuẩn+bị+cho+kỳ+thi+731+lấy+chứng+chỉ+DBA) này gồm các
khái niệm chính mà bạn cần biết để làm bài kiểm tra. Hãy làm bài tập ở
nhà của bạn ở đây và giảm bớt căng thẳng trong ngày thi.
### Về bài hướng dẫn này
Việc tinh chỉnh và định cấu hình cho cơ sở dữ liệu DB2 có thể là một quá trình phức tạp, đôi khi là rất khó cho các quản trị viên cơ sở dữ liệu mới vào nghề. Tuy nhiên, có một số lượng lớn các công cụ, các hàm và các ứng dụng đi kèm với DB2 mà một khi ta làm chủ được chúng, thì nhiệm vụ này trở nên đơn giản
Hướng dẫn này được thiết kế để giới thiệu cho bạn một bộ các công cụ giám sát sẵn có tại DB2 9 và chỉ cho các bạn cách sử dụng mỗi công cụ để giám sát xem hệ thống cơ sở dữ liệu của bạn hoạt động tốt (hoặc kém) như thế nào. Trong hướng dẫn này, bạn sẽ tìm hiểu xem:
- Cách trình giám sát của hệ thống cơ sở dữ liệu làm việc như thế nào
- Cách thu thập các thông tin chụp nhanh (snapshot) như thế nào
- Cách tạo ra các trình giám sát sự kiện và dữ liệu giám sát sự kiện được thu thập như thế nào
- Cách sử dụng trình giám sát tình trạng sức khỏe máy tính và Trung tâm sức khỏe máy tính (Health Center) như thế nào
- Các dữ liệu giải nghĩa toàn diện và dữ liệu chụp nhanh giải nghĩa khác nhau như thế nào
- Các dữ liệu giải nghĩa toàn diện và dữ liệu chụp nhanh giải nghĩa được thu thập như thế nào
- Cách sử dụng công cụ Giải nghĩa trực quan (Visual Explain) để xem giải nghĩa về dữ liệu chụp nhanh
Đây là hướng dẫn thứ tư trong loạt bảy bài hướng dẫn để giúp bạn chuẩn
bị kỳ thi lấy chứng chỉ Quản trị cơ sở dữ liệu DB2 9 cho Linux, UNIX
và Windows (Kỳ thi 731). Các tư liệu trong hướng dẫn này chủ yếu dành
cho các mục tiêu trong phần 4 của kỳ thi, có tên "Phân tích hoạt động
của DB2." Bạn có thể xem các mục tiêu này tại địa chỉ:
[http://www-03.ibm.com/certify/tests/obj731.shtml](http://www-03.ibm.com/certify/tests/obj731.shtml).
### Mục đích của bài hướng dẫn
Sau khi hoàn thành hướng dẫn này, bạn sẽ có thể:
- Thu giữ các hình chụp nhanh bằng cách sử dụng hàm
GET SNAPSHOThoặc các hàm SQL
- Tạo và kích hoạt trình giám sát sự kiện
- Định cấu hình trình giám sát tình trạng sức khỏe bằng cách sử dụng Trung tâm sức khỏe máy tính (Health Center)
- Thu giữ và phân tích các thông tin giải nghĩa / Giải nghĩa trực quan
- Nhận biết các hàm của công cụ xác định vấn đề của DB2 (ví dụ: db2pd và db2mtrk)
### Các yêu cầu cần có
Để được tham dự được kỳ thi DBA DB2 9 thì bạn đã phải vượt qua kỳ thi
730,
[Cơ bản về DB2 9](http://www-03.ibm.com/certify/tests/test_index.shtml). Chúng tôi khuyên bạn nên xem
[loại bài hướng dẫn: Cơ bản về DB2](http://www.ibm.com/developerworks/vn/views/data/libraryview.jsp ?search_by=Chuẩn+bị+cho+kỳ+thi+730+cơ+bản+về+DB2+9) trước khi
bắt đầu loạt bài hướng dẫn này.
Để giúp bạn hiểu một số tư liệu được trình bày trong hướng dẫn này, bạn phải biết các thuật ngữ sau:
**Ngôn ngữ truy vấn có cấu trúc (SQL):**Một ngôn ngữ được tiêu chuẩn hoá dùng để định nghĩa các đối tượng và thao tác dữ liệu trong một cơ sở dữ liệu quan hệ. **Trình tối ưu hóa DB2:**Một thành phần của trình tiền biên dịch SQL, Trình tối ưu hoá chọn kế hoạch truy cập cho câu lệnh SQL dùng ngôn ngữ thao tác dữ liệu bằng cách mô hình hóa các chi phí thực hiện của một số kế hoạch truy cập có thể và chọn ra kế hoạch có chi phí ước tính tối thiểu.
### Yêu cầu về hệ thống
Bạn không cần một bản sao của DB2 để hoàn thành hướng dẫn này. Tuy
nhiên, bạn sẽ học được nhiều hơn từ hướng dẫn này, nếu bạn tải về
phiên bản dùng thử miễn phí
[DB2 9 của IBM](http://www.ibm.com/developerworks/downloads/im/udb/?S_TACT=105AGY75) để làm theo bài hướng dẫn này.
## Thu giữ dữ liệu chụp nhanh
### Trình giám sát hệ thống cơ sở dữ liệu
Giám sát cơ sở dữ liệu là một hoạt động sống còn, hoạt động này, khi
được thực hiện thường xuyên, sẽ cung cấp các thông tin phản hồi liên
tục về tình trạng sức khỏe của một hệ thống cơ sở dữ liệu. Bởi vì giám
sát cơ sở dữ liệu là một phần không thể tách rời của công tác quản trị
cơ sở dữ liệu, DB2 9 được trang bị một tiện ích giám sát được gọi là
trình giám sát hệ thống cơ sở dữ liệu. Mặc dù cái tên "trình giám sát
hệ thống cơ sở dữ liệu" hàm ý rằng chỉ có một công cụ giám sát được
cung cấp, nhưng trong thực tế trình giám sát hệ thống cơ sở dữ liệu
gồm có hai công cụ riêng biệt, có thể được sử dụng để thu giữ và trả
về các thông tin giám sát hệ thống: một
*trình giám sát chụp
nhanh* và một hoặc nhiều *trình giám sát sự kiện*. Trình
giám sát chụp nhanh cho phép bạn chụp một bức tranh về trạng thái của
cơ sở dữ liệu tại một thời điểm cụ thể trong khi các trình giám sát sự
kiện thu giữ và ghi lại dữ liệu khi các sự kiện cơ sở dữ liệu cụ thể
xảy ra. Các thông tin thu thập bởi cả hai công cụ này được lưu trữ
trong các thực thể được gọi là các phần tử giám sát (hoặc gọi là phần
tử dữ liệu). Mỗi phần tử giám sát được sử dụng được xác định bởi một
tên duy nhất và được thiết kế để nắm giữ một loại hình thông tin cụ
thể. Các kiểu phần tử sau đây được sử dụng để lưu trữ dữ liệu giám
sát: **Bộ đếm (Counters).**Bộ đếm lưu giữ tổng số lần mà các hành động hay sự kiện đã xảy ra. Giá trị của bộ đếm tăng lên trong suốt cuộc đời của trình giám sát, thường thì phần tử bộ đếm giám sát cho phép bắt đầu lại. Một ví dụ về phần tử bộ đếm là tổng số câu lệnh SQL đã được thi hành đối với cơ sở dữ liệu. **Bộ đo (Gauges).**Bộ đo lưu giữ số lần mà hành động hay sự kiện đã xảy ra tại một thời điểm cụ thể. Khác với các giá trị của bộ đếm, các giá trị của bộ đo có thể tăng hoặc giảm và giá trị của nó tại một thời điểm bất kỳ nào đó thường phụ thuộc vào mức độ hoạt động của cơ sở dữ liệu. Một ví dụ về phần tử bộ đo là số lượng các ứng dụng hiện đang được kết nối với cơ sở dữ liệu. **Ngấn nước (Watermarks).**Ngấn nước cho biết giá trị cao nhất (tối đa) hoặc thấp nhất (tối thiểu) của một mục kể từ khi trình giám sát bắt đầu. Một ví dụ về phần tử ngấn nước là số lượng lớn nhất các hàng bị tác động bởi một hoạt động cập nhật. **Thông tin (Information).**Theo như tên gọi, các phần tử thông tin cung cấp các chi tiết mang tính chất tham khảo về tất cả các hoạt động giám sát được thực hiện. Ví dụ về các phần tử thông tin bao gồm tên của pool đệm, tên cơ sở dữ liệu và các bí danh, chi tiết đường dẫn, v.v.. **Mốc thời gian (Timestamps).**Mốc thời gian cho biết ngày giờ mà một hoạt động hay sự kiện đã diễn ra. Các giá trị của mốc thời gian được tính bằng số giây và phần triệu của giây đã trôi qua kể từ ngày 1 tháng Một năm 1970. Một ví dụ về phần tử mốc thời gian là ngày giờ thiết lập kết nối đầu tiên tới cơ sở dữ liệu. **Thời gian (Time).**Các phần tử thời gian lưu vết thời lượng đã dùng để thực hiện một hoạt động hoặc một sự kiện. Các giá trị thời gian được tính bằng số giây và phần triệu giây đã trôi qua kể từ khi hoạt động hay sự kiện này được bắt đầu và một số phần tử thời gian cho phép đặt bắt đầu lại. Một ví dụ về phần tử thời gian là lượng thời gian đã được dùng để thực hiện một hoạt động sắp xếp.
Trình giám sát của hệ thống cơ sở dữ liệu có thể sử dụng bất kỳ tổ hợp nào của các phần tử này để thu thập dữ liệu giám sát, và một khi dữ liệu đó đã được thu thập, thì có thể sử dụng một số phương thức để trình bày các dữ liệu lưu trữ trong mỗi phần tử đã sử dụng; đối với cả hai, trình giám sát chụp nhanh lẫn giám sát sự kiện, bạn có thể tùy chọn cách lưu trữ tất cả dữ liệu thu thập được, vào trong một tệp tin hay vào các bảng cơ sở dữ liệu, xem chúng trên màn hình, hoặc xử lý chúng bằng cách sử dụng một ứng dụng tùy chỉnh. (Trình giám sát hệ thống cơ sở dữ liệu trả về dữ liệu giám sát cho một ứng dụng khách, sử dụng dòng dữ liệu tự mô tả. Với ứng dụng giám sát chụp nhanh bạn gọi ra các API chụp nhanh thích hợp để chụp nhanh dữ liệu và sau đó xử lý dòng dữ liệu được trả về; với một ứng dụng giám sát sự kiện, bạn chuẩn bị để nhận dữ liệu được tạo ra thông qua một tệp tin hoặc một đường ống (pipe) có đặt tên, kích hoạt trình giám sát sự kiện thích hợp và xử lý luồng dữ liệu dưới dạng đã nhận được.)
### Trình giám sát chụp nhanh
Trình giám sát chụp nhanh được thiết kế để thu thập thông tin về trạng
thái của một cá thể trình quản trị cơ sở dữ liệu DB2 và các cơ sở dữ
liệu mà nó kiểm soát
*tại một thời điểm cụ thể* (nói cách khác là
tại thời điểm thực hiện chụp nhanh). Việc chụp nhanh là hữu ích để xác
định tình trạng của một hệ thống cơ sở dữ liệu, và khi chụp nhanh theo
những khoảng thời gian đều đặn, thì chúng có thể cung cấp cho ta các
thông tin có giá trị, có thể sử dụng để quan sát các xu hướng và xác
định các khu vực có vấn đề tiềm tàng. Việc chụp nhanh có thể được thực
hiện bằng cách thi hành câu lệnh
GET
SNAPSHOT từ Trình xử lý dòng lệnh (Command Line Processor -
CLP) của DB2 bằng cách sử dụng các hàm bảng chụp nhanh thích hợp trong
một truy vấn, hoặc bằng cách sử dụng các giao diện lập trình (API)
giám sát chụp nhanh trong một ứng dụng C hoặc C++. Ngoài ra, có thể đo
cắt thiết kế chức năng chụp nhanh để trả về các kiểu giá trị dữ liệu
giám sát cụ thể (ví dụ: có thể định cấu hình một bản chụp nhanh chỉ để
trả lại các thông tin về pool đệm).
### Các chuyển mạch của trình giám sát chụp nhanh
Thông thường thì việc thu thập các dữ liệu giám sát hệ thống đòi hỏi thêm tải công việc xử lý. Ví dụ, để tính toán thời gian thi hành câu lệnh SQL, trình quản lý cơ sở dữ liệu của DB2 phải gọi đến hệ điều hành để có được mốc thời gian trước và sau khi câu lệnh SQL được thực thi. Các cuộc gọi hệ thống kiểu này có thể chi phí đắt. Một tác động phụ khác của việc sử dụng trình giám sát hệ thống là lượng tiêu dùng bộ nhớ tăng lên – trình quản trị cơ sở dữ liệu DB2 sử dụng bộ nhớ để lưu trữ các dữ liệu đã thu thập được cho mọi phần tử giám sát đang được theo dõi bởi trình giám sát hệ thống.
Để giúp giảm thiểu tải công việc tăng thêm liên quan đến việc thu thập thông tin giám sát hệ thống này, một nhóm các chuyển mạch được gọi là các chuyển mạch giám sát chụp nhanh có thể được sử dụng để kiểm soát những thông tin nào được thu thập khi chụp nhanh được thực hiện; kiểu và số lượng thông tin sẽ thu thập được xác định thông qua cách thiết lập các chuyển mạch chụp nhanh. Mỗi chuyển mạch giám sát chụp nhanh có hai cách thiết đặt: ON (bật) và OFF (tắt). Khi chuyển mạch giám sát chụp nhanh được đặt ở trạng thái OFF, thì các thông tin giám sát không được thu thập cho các phần tử thuộc quyền kiểm soát của chuyển mạch ấy. Các thông tin sẽ được thu thập nếu chuyển mạch được đặt ở trạng thái ON. (Xin nhớ rằng một số lượng đáng kể các thông tin giám sát không nằm dưới sự kiểm soát của các chuyển mạch và luôn luôn được thu thập, bất kể các chuyển mạch giám sát chụp nhanh đã được thiết lập như thế nào). Bạn có thể xem các chuyển mạch có sẵn, cùng với các mô tả về các loại thông tin thu thập được khi từng bộ chuyển mạch được thiết lập ở trạng thái bật (ON) tại bảng 1.
##### Bảng 1. Các chuyển mạch giám sát chụp nhanh
|Nhóm trình giám sát||Chuyển mạch giám sát||Tham số cấu hình của trình quản trị cơ sở dữ liệu||Các thông tin được cung cấp|
|Pools đệm||BUFFERPOOL||dft_mon_bufferpool||Số lần hoạt động của pool đệm (nói cách khác là số lần của các hoạt động đọc và ghi đã thực hiện và lượng thời gian cho từng hoạt động đọc/ghi).|
|Khóa (Locks)||LOCK||dft_mon_lock||Số khóa đã nắm giữ và số lần gặp phải chu kỳ khóa chết|
|Sắp xếp (Sorts)||SORT||dft_mon_sort||Số lượng các hoạt động sắp xếp đã thực hiện, số lượng heaps đã được sử dụng, số lần tràn bộ nhớ gặp phải và hiệu năng sắp xếp.|
|Câu lệnh SQL||STATEMENT||dft_mon_stmt||Thời gian bắt đầu xử lý câu lệnh SQL, Thời gian kết thúc xử lý câu lệnh SQL, và mã nhận dạng câu lệnh SQL.|
|Bảng (Tables)||TABLE||dft_mon_table||Số lượng các hoạt động với bảng được thực hiện chẳng hạn như số hàng đã được đọc, số hàng đã được viết, vv..|
|Mốc thời gian (Timestamps)||TIMESTAMP||dft_mon_timestamp||Thông tin về thời gian và mốc thời gian.|
|Giao dịch (Transactions)||UOW||dft_mon_uow||Thời gian bắt đầu giao dịch, thời gian kết thúc giao dịch lần và trạng thái hoàn tất giao dịch.|
Theo mặc định, tất cả các chuyển mạch tại bảng 1 được đặt ở trạng thái tắt (OFF), ngoại trừ chuyển mạch TIMESTAMP (mốc thời gian), được thiết lập ở trạng thái bật (ON) và được khởi tạo khi cá thể khởi chạy lần đầu tiên.
### Xem các thiết đặt của các chuyển mạch giám sát chụp nhanh hiện tại
Như đã đề cập ở phần trước thì kiểu và số lượng thông tin được thu thập
khi thực hiện một bản chụp nhanh sẽ được kiểm soát, trong một chừng
mực nào đó, tùy theo cách các chuyển mạch chụp nhanh đã được thiết lập
như thế nào. Trước khi bạn chụp nhanh cơ sở dữ liệu, thì điều quan
trọng là bạn phải biết được chuyển mạch chụp nhanh nào đã được bật và
chuyển mạch chụp nhanh nào vẫn tắt. Làm thế nào để bạn có thể biết
được các thiết lập hiện tại của mỗi chuyển mạch chụp nhanh là gì ?
Cách đơn giản nhất là thi hành câu lệnh
GET
MONITOR SWITCHES từ trong CLP. Cú pháp cơ bản cho lệnh này
là:
GET MONITOR SWITCHES <AT DBPARTITIONNUM
[
*PartitionNum*]>
ở đây tham số
*PartitonNum* xác định phân đoạn của cơ sở dữ liệu
(trong môi trường cơ sở dữ liệu nhiều phân đoạn) nơi trạng thái của
các chuyển mạch giám sát chụp nhanh có sẵn sẽ được lấy ra và được hiển
thị. **Lưu ý**: Các tham số hiển thị trong dấu ngoặc nhọn (< >) là
tùy chọn, các tham số hoặc tùy chọn được hiển thị trong dấu ngoặc
vuông ([ ]) là bắt buộc; và dấu phẩy kèm theo dấu ba chấm (...) biểu
thị rằng các tham số trước đó có thể được lặp lại nhiều lần.
Nếu bạn muốn nhận được và hiển thị trạng thái của các chuyển mạch giám
sát chụp nhanh cho một cơ sở dữ liệu một phân đoạn, bạn có thể làm
điểu này bằng cách thi hành lệnh
GET MONITOR
SWITCHES như sau:
GET MONITOR SWITCHES
Khi lệnh này được thi hành từ CLP, thì bạn sẽ thấy một kết quả đầu ra như ở hình bên dưới.
##### Kết quả đầu ra của lệnh GET MONITOR SWITCHES
Monitor Recording Switches Switch list for db partition number 0 Buffer Pool Activity Information (BUFFERPOOL) = OFF Lock Information (LOCK) = OFF Sorting Information (SORT) = OFF SQL Statement Information (STATEMENT) = OFF Table Activity Information (TABLE) = OFF Take Timestamp Information (TIMESTAMP) = ON 06-12-2006 10:30:00.028810 Unit of Work Information (UOW) = OFF
Khi xem xét chi tiết hơn kết quả này, bạn nhận thấy rằng chuyển mạch giám sát chụp nhanh mốc thời gian TIMESTAMP đã được bật và tất cả các chuyển mạch khác đang bị tắt. Giá trị của mốc thời gian tiếp ngay sau trạng thái của chuyển mạch giám sát TIMESTAMP cho bạn biết chính xác ngày tháng và thời giờ mà chuyển mạch giám sát mốc thời gian đã được bật lên (trong trường hợp này giá trị đó là ngày 12 tháng 6 năm 2006, lúc 10:30 sáng).
### Thay đổi trạng thái của một chuyển mạch giám sát chụp nhanh
Một khi bạn biết được những chuyển mạch giám sát chụp nhanh nào đã được
bật lên và những chuyển mạch giám sát chụp nhanh nào đang ở trạng thái
tắt, thì bạn có thể sẽ cần thay đổi một hoặc nhiều thiết đặt các
chuyển mạch trước khi bạn bắt đầu quá trình giám sát. Các thiết đặt
chuyển mạch giám sát chụp nhanh có thể được thay đổi ở mức cá thể
trình quản trị cơ sở dữ liệu bằng cách sửa đổi các tham số cấu hình
thích hợp của trình quản trị cơ sở dữ liệu DB2 (xem bảng 1) với lệnh
UPDATE DATABASE MANAGER
CONFIGURATION.
Mặt khác, các thiết đặt chuyển mạch giám sát chụp nhanh có thể được
thay đổi ở mức ứng dụng bằng cách thi hành lệnh
UPDATE MONITOR SWITCHES. Cú pháp cơ bản cho lệnh này là:
UPDATE MONITOR SWITCHES USING [[
*SwitchID*]
ON | OFF ,...]
ở đây tham số
*SwitchID* xác định một hay nhiều chuyển mạch giám
sát chụp nhanh mà trạng thái phải được thay đổi. Tham số này có thể
chứa bất kỳ hoặc tất cả các giá trị sau:
BUFFERPOOL,
LOCK,
SORT,
STATEMENT,
TABLE,
TIMESTAMP và
UOW.
Nếu bạn muốn thay đổi trạng thái của chuyển mạch giám sát chụp nhanh
LOCK sang ON ở mức ứng dụng, bạn có thể làm điều này bằng cách thi
hành lệnh
UPDATE MONITOR SWITCHES như sau:
UPDATE MONITOR SWITCHES USING LOCKS ON
Tương tự, nếu bạn muốn thay đổi trạng thái của chuyển mạch giám sát chụp nhanh BUFFERPOOL sang OFF, bạn có thể làm điều này bằng cách thi hành lệnh UPDATE MONITOR SWITCHES như sau:
UPDATE MONITOR SWITCHES USING BUFFERPOOL
OFF
Việc thiết đặt các chuyển mạch giám sát chụp nhanh ở mức cá thể trình
quản trị cơ sở dữ liệu (sử dụng lệnh
UPDATE
DATABASE MANAGER CONFIGURATION) sẽ ảnh hưởng đến tất cả các
cơ sở dữ liệu dưới sự kiểm soát của cá thể ấy (nói cách khác, mọi ứng
dụng thiết lập một kết nối đến cơ sở dữ liệu dưới sự kiểm soát của cá
thể này sẽ kế thừa các thiết đặt chuyển mạch đã thực hiện trong cấu
hình của cá thể đó). Hơn nữa, các thiết đặt của chuyển mạch được thực
hiện ở mức cá thể vẫn tiếp tục còn lại thường trực khi cá thể khởi
động lại.
Việc thiết đặt các chuyển mạch giám sát ở mức ứng dụng (bằng cách sử
dụng lệnh
UPDATE MONITOR SWITCHES) chỉ ảnh
hưởng đến cơ sở dữ liệu mà ứng dụng đơn lẻ này tương tác với nó. Ngoài
ra, các thiết đặt cho chuyển mạch chỉ có tác dụng trong thời gian sống
của ứng dụng đó.
### Thu giữ dữ liệu giám sát chụp nhanh
Ngay sau khi cơ sở dữ liệu được kích hoạt hoặc kết nối đến cơ sở dữ
liệu được thiết lập, trình giám sát chụp nhanh bắt đầu thu thập dữ
liệu giám sát. Tuy nhiên, phải thực hiện một cú chụp nhanh trước khi
có thể xem được bất kỳ dữ liệu nào đã thu thập. (Về bản chất, hình
chụp nhanh là hình ảnh những gì thể hiện các phần tử giám sát đang sử
dụng, tại một thời điểm cụ thể). Có thể thực hiện chụp nhanh bằng cách
nhúng API
db2GetSnapshot() vào một chương
trình ứng dụng, hoặc bằng cách thi hành lệnh
GET
SNAPSHOT Cú pháp cơ bản cho lệnh này là:
GET SNAPSHOT FOR [DATABASE MANAGER | DB MANAGER | DBM] | ALL DATABASES | ALL APPLICATIONS | ALL BUFFERPOOLS | ALL REMOTE_DATABASES | ALL REMOTE_APPLICATIONS | ALL ON [
DatabaseAlias] | DATABASE ON [ DatabaseAlias] | APPLICATIONS ON [ DatabaseAlias] | TABLES ON [ DatabaseAlias] | TABLESPACES ON [ DatabaseAlias] | LOCKS ON [ DatabaseAlias] | BUFFERPOOLS ON [ DatabaseAlias] | DYNAMIC SQL ON [ DatabaseAlias]
ở đây tham số
*DatabaseAlias* xác định bí danh đã gán cho cơ sở dữ
liệu mà các thông tin giám sát chụp nhanh sẽ được thu thập cho cơ sở
dữ liệu đó.
Nếu bạn muốn có một hình chụp nhanh chỉ chứa dữ liệu thu thập về các khóa đang được nắm giữ bởi các ứng dụng tương tác với cơ sở dữ liệu có tên là PAYROLL, bạn có thể làm điều này bằng cách thi hành lệnh sau:
GET SNAPSHOT FOR LOCKS ON PAYROLL
Kết quả đầu ra của lệnh này sẽ trông giống như hình bên dưới. (Lưu ý rằng đây là một ví dụ đơn giản. Tình huống giám sát thực tế thường tạo ra một số lượng lớn dữ liệu..)
##### Ví dụ kết quả đầu ra của lệnh GET SNAPSHOT
Database Lock Snapshot Database name = PAYROLL Database path = C:\DB2\NODE0000\SQL00002\ Input database alias = PAYROLL Locks held = 2 Applications currently connected = 1 Agents currently waiting on locks = 0 Snapshot timestamp = 06-12-2004 08:39:40.750316 Application handle = 8 Application ID = *LOCAL.DB2.00E286133931 Sequence number = 0001 Application name = db2bp.exe CONNECT Authorization ID = DB2ADMIN Application status = UOW Waiting Status change time = Not Collected Application code page = 1252 Locks held = 2 Total wait time (ms) = Not Collected List Of Locks Lock Name = 0x94928D848F9F949E7B89505241 Lock Attributes = 0x00000000 Release Flags = 0x40000000 Lock Count = 1 Hold Count = 0 Lock Object Name = 0 Object Type = Internal P Lock Mode = S Lock Name = 0x96A09A989DA09A7D8E8A6C7441 Lock Attributes = 0x00000000 Release Flags = 0x40000000 Lock Count = 1 Hold Count = 0 Lock Object Name = 0 Object Type = Internal P Lock Mode = S
Như bạn thấy, câu lệnh
GET SNAPSHOT có thể
được dùng để thu giữ nhiều kiểu dữ liệu giám sát khác nhau, bao gồm:
- Dữ liệu của cá thể trình quàn lý cơ sở dữ liệu của DB2
- Dữ liệu của cơ sở dữ liệu cho tất cả các cơ sở dữ liệu đang hoạt động dưới sự kiểm soát của cá thể ấy
- Dữ liệu ứng dụng
- Dữ liệu về hoạt động của pool đệm
- Dữ liệu về vùng bảng
- Dữ liệu bảng
- Dữ liệu về khóa (thông tin về tất cả các khóa đang bị giữ)
- Dữ liệu về SQL động (thông tin tại đúng thời điểm về câu lệnh SQL được giữ tại bộ nhớ cache của câu lệnh SQL)
Bạn cũng có thể nhận thấy rằng có một sự tương quan trực tiếp giữa các chuyển mạch giám sát chụp nhanh sẵn có và các kiểu dữ liệu giám sát khác nhau có thể được thu thập khi một hình chụp nhanh được thực hiện. Nếu một chuyển mạch giám sát chụp nhanh cụ thể bị tắt đi và ảnh chụp nhanh các phần tử giám sát kết hợp với chuyển mạch đó được thực hiện, thì các dữ liệu giám sát thu được sẽ không có bất kỳ giá trị nào cả. (Trong ví dụ trước, một số giá trị được hiển thị với thông báo: Không thu thập được (Not Collected) vì chuyển mạch giám sát chụp nhanh tương ứng ở trạng thái tắt (OFF). Hơn nữa, nếu không có khóa nào được nắm giữ tại thời điểm thực hiện chụp nhanh, thì giá trị cho khóa đó là 0 và danh sách hiển thị các thông tin về khóa sẽ không được sinh ra.)
### Thu giữ dữ liệu giám sát chụp nhanh bằng cách sử dụng SQL
Với các phiên bản trước của cơ sở dữ liệu phổ quát (UDB) DB2, cách duy
nhất để thu giữ dữ liệu giám sát chụp nhanh là thi hành lệnh
GET SNAPSHOT hoặc gọi API tương ứng của nó từ
trong một chương trình ứng dụng. Với DB2 phiên bản 8.1, thì khả năng
thu giữ dữ liệu của trình giám sát chụp nhanh bằng cách xây dựng một
truy vấn đã được đưa vào thêm. Phương pháp này dựa trên hai mươi hàm
bảng đặc biệt để giám sát chụp nhanh, các hàm này đã trở nên lỗi thời,
bị loại trong phiên bản 9.1. Bây giờ, dữ liệu giám sát chụp nhanh có
thể thu được bằng cách sử dụng một tập hợp mới các thường trình
(routines) SQL để truy cập dữ liệu được lưu giữ trong các khung nhìn
quản trị đặc biệt. Các thường trình và các khung nhìn này được mô tả
trong bảng 2.
##### Bảng 2. Các khung nhìn quản trị và các thường trình SQL quản trị về chụp nhanh
|Khung nhìn quản trị||Thường trình||Mô tả|
|APPLICATIONS||N/A||Khung nhìn quản trị này chứa thông tin về các ứng dụng đã kết nối cơ sở dữ liệu|
|APPL_PERFORMANCE||N/A||Khung nhìn quản trị này chứa thông tin về tỷ lệ số các hàng được chọn so với số các hàng mà ứng dụng đã đọc ra|
|BP_HITRATIO||N/A||Khung nhìn quản trị này chứa thông tin về các ứng dụng đã kết nối cơ sở dữ liệu|
|BP_READ_IO||N/A||Khung nhìn quản trị này chứa thông tin về thực hiện đọc pool đệm|
|BP_WRITE_IO||N/A||Khung nhìn quản trị này chứa thông tin về thực hiện viết vào pool đệm|
|CONTAINER_UTILIZATION||N/A||Khung nhìn quản trị này chứa thông tin về thùng chứa vùng bảng và tỷ lệ sử dụng|
|LOCKS_HELD||N/A||Khung nhìn quản trị này chứa thông tin về các khóa đang được nắm giữ|
|LOCKWAITS||N/A||Khung nhìn quản trị này chứa thông tin về các khóa đang đợi được cấp|
|LOG_UTILIZATION||N/A||Khung nhìn quản trị này chứa thông tin về nhật ký sử dụng của cơ sở dữ liệu đã kết nối|
|LONG_RUNNING_SQL||N/A||Khung nhìn quản trị này chứa thông tin về các câu lệnh SQL chạy lâu nhất trong cơ sở dữ liệu hiện tại đã kết nối.|
|QUERY_PREP_COST||N/A||Khung nhìn quản trị này chứa danh sách các câu lệnh SQL cùng với thời gian cần thiết để chuẩn bị mỗi câu lệnh|
|N/A||SNAP_WRITE_FILE||Thủ tục này ghi dữ liệu chụp nhanh hệ thống vào một tệp tin
trong thư mục con |tmp của cá thể trình quản trị cơ sở
dữ liệu.
|SNAPAGENT||SNAP_GET_AGENT||Khung nhìn quản trị và hàm bảng trả về thông tin về các tác tử từ một hình chụp nhanh ứng dụng, đặc biệt là về nhóm dữ liệu lôgic của tác tử.|
|SNAPAGENT_MEMORY_POOL||SNAP_GET_AGENT_MEMORY_POOL||Khung nhìn quản trị và hàm bảng trả về thông tin về việc sử dụng bộ nhớ tại mức tác tử|
|SNAPAPPL||SNAP_GET_APPL||Khung nhìn quản trị và hàm bảng trả về các thông tin về ứng dụng từ hình chụp nhanh ứng dụng, đặc biệt là về nhóm dữ liệu lôgic appl|
|SNAPAPPL_INFO||SNAP_GET_APPL_INFO||Khung nhìn quản trị và hàm bảng trả về các thông tin về ứng dụng từ hình chụp nhanh ứng dụng, đặc biệt là về nhóm dữ liệu lôgic appl_info|
|SNAPBP||SNAP_GET_BP||Khung nhìn quản trị và hàm bảng trả về các thông tin về các pool đệm, đặc biệt là về nhóm dữ liệu lôgic bufferpool.|
|SNAPBP_PART||SNAP_GET_BP_PART||Khung nhìn quản trị và hàm bảng trả về các thông tin về các pool đệm, từ một hình chụp nhanh bufferpool, đặc biệt là về nhóm dữ liệu lôgic bufferpool_nodeinfo.|
|SNAPCONTAINER||SNAP_GET_CONTAINER_V91||Khung nhìn quản trị và hàm bảng trả về các thông tin về hình chụp nhanh vùng bảng từ nhóm dữ liệu lôgic tablespace_container|
|SNAPDB||SNAP_GET_DB_V91||Khung nhìn quản trị và hàm bảng trả về các thông tin hình chụp nhanh từ cơ sở dữ liệu (dbase) và gộp nhóm lôgic lưu trữ cơ sở dữ liệu(db_storage_group)|
|SNAPDB_MEMORY_POOL||SNAP_GET_DB_MEMORY_POOL||Khung nhìn quản trị và hàm bảng trả về các thông tin về sử dụng bộ nhớ tại mức cơ sở dữ liệu chỉ riêng cho hệ thống nền UNIX(R)|
|SNAPDBM||SNAP_GET_DMB||Khung nhìn quản trị và hàm bảng trả về các thông tin gộp nhóm lôgic của trình quản lý cơ sở dữ liệu DB2 (dbm) của trình giám sát chụp hình.|
|SNAPDBM_MEMORY_POOL||SNAP_GET_DBM_MEMORY_POOL||Khung nhìn quản trị và hàm bảng trả về các thông tin về sử dụng bộ nhớ tại mức trình quản lý cơ sở dữ liệu|
|SNAPDETAILLOG||SNAP_GET_DETAILLOG_V91||Khung nhìn quản trị và hàm bảng trả về các thông tin về hình chụp nhanh từ nhóm dữ liệu lôgic detail_log|
|SNAPDYN_SQL||SNAP_GET_DYN_SQL_V91||Khung nhìn quản trị và hàm bảng trả về các thông tin về hình chụp nhanh từ nhóm dữ liệu lôgic dynsql.|
|SNAPFCM||SNAP_GET_FCM||Khung nhìn quản trị và hàm bảng trả về các thông tin về trình quản lý truyền thông nhanh chóng (FCM) từ hình chụp nhanh trình quản lý cơ sở dữ liệu, đặc biệt là về nhóm dữ liệu lôgic fcm|
|SNAPFCM_PART||SNAP_GET_FCM_PART||Khung nhìn quản trị và hàm bảng trả về các thông tin về trình quản lý truyền thông nhanh (FCM) từ hình chụp trình quản lý cơ sở dữ liệu, đặc biệt là về nhóm dữ liệu lôgic fcm_node.|
|SNAPHADR||SNAP_GET_HADR||Khung nhìn quản trị và hàm bảng trả về các thông tin về tính sẵn sàng phục hồi sau sự cố từ hình chụp nhanh cơ sở dữ liệu, đặc biệt là về nhóm dữ liệu lôgic hadr|
|SNAPLOCK||SNAP_GET_LOCK||Khung nhìn quản trị và hàm bảng trả về các thông tin chụp nhanh về khóa, đặc biệt là về nhóm dữ liệu lôgic lock|
|SNAPLOCKWAIT||SNAP_GET_LOCKWAIT||Khung nhìn quản trị và hàm bảng trả về các thông tin chụp nhanh về chờ khóa, đặc biệt là về nhóm dữ liệu lôgic lockwait|
|SNAPSTMT||SNAP_GET_STMT||Khung nhìn quản trị và hàm bảng trả về các thông tin về câu lệnh từ hình chụp nhanh ứng dụng|
|SNAPSTORAGE_PATHS||SNAP_GET_STORAGE_PATHS||Khung nhìn quản trị và hàm bảng trả về danh sách các đường dẫn lưu trữ tự động cho cơ sở dữ liệu, bao gồm thông tin về hệ thống tệp tin cho mỗi đường dẫn lưu trữ, đặt biệt là từ nhóm dữ liệu lôgic db_storage_group|
|SNAPSUBSECTION||SNAP_GET_SUBSECTION||The administrative view and table function returns information about application subsections, namely the subsection logical monitor grouping.|
|SNAPSWITCHES||SNAP_GET_SWITCHES||Khung nhìn quản trị và hàm bảng trả về thông tin về trạng thái các chuyển mạch chụp nhanh cơ sở dữ liệu|
|SNAPTAB||SNAP_GET_TAB_V91||Khung nhìn quản trị và hàm bảng trả về thông tin chụp nhanh từ nhóm dữ liệu lôgic của bảng (table)|
|SNAPTAB_REORG||SNAP_GET_TAB_REORG||Khung nhìn quản trị và hàm bảng trả về thông tin về tổ chức lại bảng.|
|SNAPTBSP||SNAP_GET_TBSP_V91||Khung nhìn quản trị và hàm bảng trả về thông tin chụp nhanh từ nhóm dữ liệu lôgic không gian bảng (tablespace).|
|SNAPTBSP_PART||SNAP_GET_TBSP_PART_V91||Khung nhìn quản trị và hàm bảng trả về thông tin chụp nhanh từ nhóm dữ liệu lôgic tablespace_nodeinfo.|
|SNAPTBSP_QUIESCER||SNAP_GET_TBSP_QUIESCER||Khung nhìn quản trị và hàm bảng trả về thông tin về các lệnh giữ im lặng (quiescers) từ hình chụp nhanh vùng bảng|
|SNAPTBSP_RANGE||SNAP_GET_TBSP_RANGE||Khung nhìn quản trị và hàm bảng trả về thông tin từ hình chụp nhanh của dải (range) vùng bảng|
|SNAPUTIL||SNAP_GET_UTIL||Khung nhìn quản trị và hàm bảng trả về thông tin chụp nhanh về các tiện ích từ nhóm dữ liệu lôgic utility_info.|
|SNAPUTIL_PROGRESS||SNAP_GET_UTIL_PROGRESS||Khung nhìn quản trị và hàm bảng trả về thông tin về tiến trình tiện ích, đặc biệt là về nhóm dữ liệu lôgic tiến trình|
|TBSP_UTILIZATION||N/A||Khung nhìn quản trị chứa các thông tin về cấu hình và sử dụng vùng bảng|
|TOP_DYNAMIC_SQL||N/A||Khung nhìn quản trị chứa các câu lệnh SQL động có thứ hạng cao nhất khi sắp xếp theo số lần thi hành, thời gian thực thi trung bình, số lần sắp xếp hoặc sắp xếp theo từng câu lệnh|
Nếu bạn muốn có thông tin về khóa của các cơ sở dữ liệu hiện đang kết nối chẳng hạn, bạn có thể làm điều này bằng cách thực hiện truy vấn sau:
SELECT AGENT_ID, LOCK_OBJECT_TYPE, LOCK_MODE, LOCK_STATUS FROM SYSIBMADM.SNAPLOCK
Hàm bảng
SNAP_GET_LOCK trả về cũng các thông
tin giống như khung nhìn quản trị
SNAPLOCK
nhưng nó cho phép bạn lấy ra các thông tin của một cơ sở dữ liệu cụ
thể hoặc cơ sở dữ liệu cụ thể trên một phân đoạn cơ sở dữ liệu cụ thể
(thay vì cơ sở dữ liệu hiện đang được kết nối). Lệnh truy vấn sử dụng
hàm bảng
SNAP_GET_LOCK như sau:
SELECT AGENT_ID, LOCK_OBJECT_TYPE, LOCK_MODE, LOCK_STATUS FROM TABLE(SNAP_GET_LOCK('',-1)) AS T
Khi được sử dụng với hàm bảng
SNAP_GET_LOCKWAIT, hàm bảng
SNAP_GET_LOCK cung cấp các thông tin tương tự như lệnh
GET SNAPSHOT FOR LOCKS ON
[.
*DatabaseAlias*]
### Bắt đầu lại bộ đếm giám sát chụp nhanh
Trước đây bạn thấy rằng một trong những kiểu phần tử mà các phần tử
giám sát sử dụng để lưu trữ dữ liệu là một bộ đếm và các bộ đếm đó lưu
giữ tổng lũy kế số lần một hoạt động hay một sự kiện xảy ra. Giá trị
của bộ đếm tăng lên trong suốt thời gian tồn tại của trình giám sát.
Vậy thì việc đếm bắt đầu chính xác vào khi nào? Việc đếm thường bắt
đầu ngay khi chuyển mạch giám sát chụp nhanh được bật lên hoặc khi ta
kết nối vào cơ sở dữ liệu (nếu sử dụng giám sát ở mức cá thể (trình
quản trị cơ sở dữ liệu), thì việc đếm bắt đầu khi ứng dụng lần đầu
tiên thiết lập một kết nối đến cơ sở dữ liệu dưới sự kiểm soát của cá
thể ấy). Tuy nhiên, có những lúc ta muốn bắt đầu lại tất cả các bộ đếm
trở về 0 mà không phải tắt chuyển mạch giám sát chụp nhanh rồi bật lại
ngay, và không phải ngắt và thiết lập lại kết nối tới cơ sở dữ liệu.
Cách dễ dàng nhất để nhanh chóng đưa bộ đếm giám sát chụp nhanh về 0
là thực hiện lệnh
RESET MONITOR Cú pháp cơ
bản cho lệnh này là:
RESET MONITOR ALL
hoặc
RESET MONITOR FOR [DATABASE | DB] [
DatabaseAlias]
ở đây tham số
*DatabaseAlias* xác định bí danh của cơ sở dữ liệu
mà các bộ đếm giám sát chụp nhanh cho cơ sở dữ liệu đó phải bắt đầu
lại.
Nếu bạn muốn bắt đầu lại các bộ đếm giám sát chup nhanh cho tất cả các
cơ sở dữ liệu dưới sự kiểm soát của cá thể (trình quản trị cơ sở dữ
liệu), thì bạn có thể làm điều này bằng cách gắn với cá thể đó và thi
hành lệnh
RESET MONITOR sau:
RESET MONITOR ALL
Mặt khác, nếu bạn chỉ muốn bắt đầu lại các bộ đếm giám sát chụp nhanh
kết hợp với một cơ sở dữ liệu có tên là SAMPLE, thì bạn có thể làm
điều này bằng cách thực hiện lệnh
RESET
MONITOR như sau:
RESET MONITOR FOR DATABASE SAMPLE
Điều quan trọng mà bạn cần lưu ý là bạn không thể chọn lọc và bắt đầu
lại chỉ một số các bộ đếm của một nhóm giám sát cụ thể kiểm soát bởi
một chuyển mạch giám sát chụp nhanh bằng cách sử dụng lệnh
RESET MONITOR. Để thực hiện hoạt động kiểu
này, bạn phải tắt chuyển mạch giám sát chụp nhanh thích hợp rồi bật
lại ngay hoặc ngắt và thiết lập lại các kết nối tới cơ sở dữ liệu.
## Thu giữ dữ liệu của trình giám sát sự kiện
### Các trình giám sát sự kiện
Bạn vừa thấy rằng các trình giám sát chụp nhanh cung cấp một cách thức để thu giữ và ghi lại các thông tin về trạng thái của một cá thể (trình quản trị cơ sở dữ liệu) hay một cơ sở dữ liệu tại một thời điểm cụ thể. Ngược lại, các trình giám sát sự kiện thu thập dữ liệu khi xảy ra các sự kiện cụ thể hoặc các chuyển trạng thái. Trình giám sát sự kiện cung cấp một cách thức để thu thập dữ liệu giám sát khi các sự kiện hoặc các hoạt động xảy ra mà ta không thể giám sát được bằng cách sử dụng các trình giám sát chụp nhanh.
Ví dụ, giả sử bạn muốn thu thập dữ liệu giám sát bất cứ khi nào một chu trình khóa chết xảy ra. Nếu bạn quen với khái niệm khóa chết (deadlocks), thì bạn biết rằng một tiến trình đặc biệt được gọi là trình dò tìm khóa chết (daemon) lặng lẽ chạy ở mặt sau và "tỉnh dậy" theo các khoảng thời gian định trước để quét hệ thống khóa tìm các chu trình khóa chết. Nếu tìm thấy một chu trình khóa chết, thì trình dò tìm khóa chết sẽ chọn ngẫu nhiên một trong những giao dịch dính líu đến chu trình, cuộn ngược lại, và chấm dứt giao dịch ấy. Kết quả là giao dịch được chọn nhận được một mã lỗi SQL và tất cả các khóa đã giành được nhân danh giao dịch này sẽ được giải phóng để cho các giao dịch còn lại có thể tiến hành. Thông tin về một loạt các sự kiện như vậy không thể thu thập được bởi trình giám sát chụp nhanh bởi vì, rất nhiều khả năng là chu trình khóa chết sẽ bị phá vỡ từ lâu rồi trước khi một hình chụp nhanh có thể được thực hiện. Mặt khác, một trình giám sát sự kiện có thể thu được những thông tin quan trọng về sự kiện như vậy bởi vì nó sẽ được kích hoạt vào chính thời điểm mà chu trình khóa chết được phát hiện.
Có một sự khác biệt đáng kể nữa giữa hai trình giám sát này - trình giám sát chụp nhanh tồn tại như một là tiến trình ở mặt sau, nó bắt đầu thu thập dữ liệu giám sát một khi kết nối đến cơ sở dữ liệu được thiết lập. Ngược lại, các trình giám sát sự kiện phải được tạo ra trước khi có thể sử dụng chúng. Một số trình giám sát sự kiện khác nhau có thể tồn tại, và mỗi trình giám sát sự kiện được kích hoạt chỉ khi một kiểu sự kiện hoặc giao dịch cụ thể xảy ra. Bảng 3 cho thấy các kiểu sự kiện có thể làm cho một trình giám sát sự kiện được kích hoạt, cùng với các loại dữ liệu giám sát được thu thập đối với mỗi kiểu sự kiện.
##### Bảng 3. Các kiểu sự kiện và các dữ liệu được thu thập cho mỗi sự kiện
|Kiểu sự kiện||Dữ liệu thu thập được||Khi nào thì dữ liệu được thu thập||Tên nhóm (Bảng đích) kết hợp|
|DATABASE||Giá trị của tất cả các bộ đếm ở mức cơ sở dữ liệu||Khi cơ sở dữ liệu ngừng hoạt động, hay khi ứng dụng cuối cùng đã kết nối tới cơ sở dữ liệu chấm dứt kết nối||DB, CONTROL|
|BUFFERPOOLS||Giá trị của tất cả các bộ đếm của pool đệm, của các trình tiền nạp (prefetchers) và của các trình làm sạch trang cũng như các I/O trực tiếp cho mỗi pool đệm được sử dụng||Khi cơ sở dữ liệu ngừng hoạt động, hay khi ứng dụng cuối cùng đã kết nối tới cơ sở dữ liệu chấm dứt kết nối||BUFFERPOOL, CONTROL|
|TABLESPACES||Giá trị của tất cả các bộ đếm của pool đệm, của các trình tiền nạp (prefetchers) và của các trình làm sạch trang cũng như các I/O trực tiếp cho mỗi vùng bảng được sử dụng||Khi cơ sở dữ liệu ngừng hoạt động, hay khi ứng dụng cuối cùng được kết nối tới cơ sở dữ liệu chấm dứt kết nối||TABLESPACE, CONTROL|
|TABLES||Số hàng đã đọc và số hàng đã viết vào cho mỗi bảng||Khi cơ sở dữ liệu ngừng hoạt động, hay khi ứng dụng cuối cùng được kết nối tới cơ sở dữ liệu chấm dứt kết nối||TABLE, CONTROL|
|DEADLOCKS||Thông tin toàn diện về những ứng dụng liên quan, bao gồm mã nhận diện tất cả các câu lệnh SQL liên quan đến (cùng với văn bản của câu lệnh) và một danh sách các khóa mà mỗi câu lệnh đó nắm giữ||Khi chu trình khóa chết được phát hiện||CONNHEADER, DEADLOCK, DLCONN, DLLOCK, CONTROL|
|CONNECTIONS||Giá trị của tất cả các bộ đếm ở mức ứng dụng||Khi một ứng dụng đã kết nối tới cơ sở dữ liệu chấm dứt kết nối||CONNHEADER, CONN, CONTROL|
|STATEMENTS||Thời gian bắt đầu/ kết thúc của câu lệnh, lượng CPU đã dùng, văn bản của các câu lệnh SQL động, SQLCA (Mã trả về của câu lệnh SQL) và những số đo khác ví dụ như số lần tìm nạp. Đối với các cơ sở dữ liệu được phân đoạn: lượng CPU đã dùng, thời gian thi hành, thông tin bảng và thông tin về hàng đợi của bảng||Khi câu lệnh SQL thi hành xong, hay, đối với những cơ sở dữ liệu được phân đoạn, khi một phần của câu lệnh SQL thi hành xong||CONNHEADER, STMT, SUBSECTION, CONTROL|
|TRANSACTIONS||Thời gian bắt đầu/ kết thúc giao dịch, thời gian giao dịch trước đó, lượng CPU đã tiêu dùng, cùng với các số đo về khóa và nhật ký (bản ghi các giao dịch không được tạo ra nếu cơ sở dữ liệu áp dụng xử lý giao kết hai pha và giao diện XA X/Open)||Khi một giao dịch kết thúc (bằng câu lệnh giao kết hay cuộn ngược lại)||CONNHEADER, XACT, CONTROL|
Do trình giám sát sự kiện là các đối tượng cơ sở dữ liệu đặc biệt cần phải được tạo ra trước khi có thể sử dụng chúng, nên chúng chỉ có thể thu thập dữ liệu giám sát cho các sự kiện hoặc các giao dịch diễn ra trong cơ sở dữ liệu mà chúng đã được định nghĩa. Các trình giám sát sự kiện không thể được sử dụng để thu thập dữ liệu giám sát ở mức cá thể (trình quản trị cơ sở dữ liệu).
### Tạo các trình giám sát sự kiện
Bạn
có thể tạo các trình giám sát sự kiện trực tiếp từ Trung tâm điều
khiển (Control Center - chọn mục Create Event Monitor từ trình đơn
Event Monitors) hoặc bằng cách thi hành câu lệnh SQL
CREATE EVENT MONITOR. Cú pháp cơ bản cho câu
lệnh này là:
CREATE EVENT MONITOR [
Name] FOR [DATABASE | BUFFERPOOLS | TABLESPACES | TABLES | DEADLOCKS <WITH DETAIL> | CONNECTIONS <WHERE [ EventCondition]> | STATEMENTS <WHERE [ EventCondition]]> | TRANSACTIONS <WHERE [ EventCondition]> , ...] WRITE TO [TABLE [ GroupName] (TABLE [ TableName]) | PIPE [ PipeName] | FILE [ DirectoryName]] [MANUALSTART | AUTOSTART]
ở đây:
*Name*là tên để gán cho trình giám sát sự kiện sẽ được tạo ra. *EventCondition*là điều kiện được sử dụng để xác định trình giám sát sự kiện sẽ thu thập dữ liệu cho CONNECTION, STATEMENT hay TRANSACTION nào. *GroupName*là nhóm dữ liệu lôgic mà bảng đích đã được định nghĩa cho nó. (Xem bảng 3 để biết các giá trị thích hợp để sử dụng cho tham số này.) *TableName*là tên được gán cho bảng cơ sở dữ liệu mà tất cả các dữ liệu giám sát sự kiện được ghi vào. *PipeName*là tên được gán cho đường ống có đặt tên mà tất cả các dữ liệu giám sát sự kiện được ghi vào. *DirectoryName*là tên được gán cho thư mục mà một hoặc nhiều tệp tin chứa dữ liệu giám sát sự kiện sẽ ghi vào.
Giả sử rằng bạn muốn tạo ra một trình giám sát sự kiện thu thập
các giá trị của tất cả các bộ đếm ở mức ứng dụng và ghi chúng vào một
bảng cơ sở dữ liệu được đặt tên là CONN_DATA mỗi khi một ứng dụng
ngừng kết nối của nó đến một cơ sở dữ liệu. Để làm điều này, bạn thực
hiện câu lệnh
CREATE EVENT MONITOR như sau:
CREATE EVENT MONITOR CONN_EVENTS FOR CONNECTIONS WRITE TO TABLE CONN (TABLE CONN_DATA)
Bây
giờ giả sử rằng bạn muốn tạo ra một trình giám sát sự kiện thu thập
các dữ liệu giám sát cho các sự kiện của cả pool đệm lẫn vùng bảng và
ghi tất cả các dữ liệu thu thập được vào thư mục có tên
*/export/home/bpts_data*. Để làm điều đó, bạn thực hiện câu
lệnh
CREATE EVENT MONITOR như sau:
CREATE EVENT MONITOR BPTS_EVENTS FOR BUFFERPOOLS, TABLESPACES WRITE TO FILE '/export/home/BPTS_DATA'
Như bạn thấy, khi tạo một trình giám sát sự kiện, bạn phải chỉ rõ kiểu sự kiện sẽ kích hoạt trình giám sát sự kiện, cũng như vị trí nơi mà tất cả các dữ liệu thu thập được phải được ghi vào.
Kết quả đầu ra
từ một trình giám sát sự kiện có thể được ghi vào một hoặc nhiều bảng
cơ sở dữ liệu, vào một hay nhiều tệp tin bên ngoài, hoặc vào một đường
ống có đặt tên. Các trình giám sát sự kiện bảng và đường ống phân
luồng các bản ghi sự kiện trực tiếp vào bảng hoặc đường ống có tên đã
chỉ rõ. Mặt khác, các trình giám sát sự kiện tệp phân luồng các bản
ghi sự kiện vào tệp tin gồm tám chữ số, có phần mở rộng là
.evt (ví dụ:
00000000.evt,
00000001.evt,
v.v…). Dữ liệu được lưu giữ trong các tập tin này phải được xử lý như
thể nó là một dòng dữ liệu duy nhất được lưu giữ trong một tệp tin duy
nhất, mặc dù trên thực tế dữ liệu được chia thành nhiều tệp tin nhỏ
(điểm bắt đầu của dòng dữ liệu là byte dữ liệu đầu tiên được tìm thấy
trong tệp tin tên là
00000000.evt và điểm
cuối của dòng dữ liệu là byte dữ liệu cuối cùng được tìm thấy trong
các tệp tin cuối cùng được tạo ra).
Nếu bạn chỉ rõ rằng kết quả
đầu ra từ một trình giám sát sự kiện sẽ được lưu trữ trong các bảng cơ
sở dữ liệu, thì tất cả các bảng đích sẽ được tự động tạo ra khi lệnh
CREATE EVENT MONITOR được thi hành.
(Nếu việc tạo ra bảng không thành công do bất kỳ lý do gì, thì mã lỗi
được tạo ra và lệnh
CREATE EVENT MONITOR
không thực hiện được). Tuy nhiên, nếu bạn chỉ rõ rằng kết quả đầu ra
từ một trình giám sát sự kiện sẽ được ghi vào một hay nhiều tệp tin
bên ngoài hoặc một đường ống được đặt tên, thì thư mục đầu ra hoặc
đường ống được đặt tên đã chỉ rõ phải tồn tại và người sở hữu cá thể
trình quản lý cơ sở dữ liệu của DB2 phải có khả năng ghi vào thư mục
đó vào thời điểm mà trình giám sát sự kiện được kích hoạt. Ngoài ra,
nếu sử dụng một đường ống được đặt tên, thì ứng dụng giám sát đường
ống được đặt tên phải đang chạy và nó phải mở các đường ống cho việc
đọc trước khi trình giám sát sự kiện được kích hoạt.
### Bắt đầu và ngừng chạy các trình giám sự kiện
Nếu bạn chỉ định tùy chọn
AUTOSTART khi tạo một trình giám sát sự kiện, thì trình
giám sát sẽ tự động khởi động khi cơ sở dữ liệu chứa trình giám sát sự
kiện được khởi chạy. (Cơ sở dữ liệu được khởi chạy khi nó được kích
hoạt với lệnh
ACTIVATE DATABASE hoặc khi
kết nối đầu tiên tới cơ sở dữ liệu được thiết lập). Nếu bạn sử dụng
tùy chọn
MANUALSTART hoặc không chỉ định
tùy chọn nào (trong trường hợp đó, tùy chọn
MANUALSTART được sử dụng theo mặc định), thì trình giám
sát sự kiện được sinh ra với lựa chọn đó sẽ không thu thập dữ liệu
giám sát cho đến khi nó được khởi chạy. Trình giám sát sự kiện có thể
được khởi chạy (và ngừng lại) bằng cách thực hiện câu lệnh SQL
SET EVENT MONITOR. Cú pháp cơ bản cho câu
lệnh này là:
SET EVENT MONITOR [
MonitorName] STATE <=> [ MonitorState]
ỏ
đây
*MonitorName* là tên của trình giám sát sự kiện mà trạng thái
của nó cần được thay đổi và MonitorState là trạng thái mà trình giám
sát sự kiện đã chỉ rõ cần phải được đặt vào. Để khởi chạy trình giám
sát sự kiện (nói cách khác là đặt nó ở trạng thái “hoạt động”
(active), thì bạn phải gán giá trị **1** cho tham số
*MonitorState* Để ngừng trình giám sát sự kiện (nói cách khác
là đặt nó ở trạng thái “không hoạt động” (inactive), bạn gán giá trị
**0** cho tham số đó.
Giả sử rằng bạn muốn khởi chạy một
trình giám sát sự kiện có tên là CONN_EVENTS đã được tạo ra với tùy
chọn
MANUALSTART. Bạn hãy làm điều này bằng
cách thi hành câu lệnh sau:
SET EVENT MONITOR CONN_EVENTS STATE 1
Mặt khác, nếu bạn muốn ngừng trình giám sát sự kiện CONN_EVENTS, thì hãy thi hành câu lệnh sau:
SET EVENT MONITOR CONN_EVENTS STATE 0
Bạn cũng có thể bắt đầu và ngừng trình giám sát sự kiện bằng cách chọn tên trình giám sát sự kiện thích hợp trong Trung tâm điều khiển (Control Center) và chọn một hành động (Start Event Monitoring hoặc Stop Event Monitoring) từ trình đơn Event Monitors.
Hàm SQL
EVENT_MON_STATE có thể được dùng để xác định
tình trạng hiện thời của bất kỳ trình giám sát sự kiện nào đã được
định nghĩa cho cơ sở dữ liệu. Hàm này phải được sử dụng trong một truy
vấn giống như sau:
SELECT EVENT_MON_STATE('CONN_EVENTS') FROM
SYSIBM.SYSDUMMY1
(Trong ví dụ này, bảng SYSIBM.SYSDUMMY1 là một bảng rỗng thường được sử dụng như một mục giữ chỗ - Placeholder)
Một khi được khởi chạy, trình giám sát sự kiện nằm lặng lẽ tại nền sau và chờ đợi một trong những sự kiện hoặc bước chuyển trạng thái mà nó được thiết kế để giám sát diễn ra. Khi sự kiện hoặc bước chuyển trạng thái đó xảy ra, trình giám sát sự kiện thu thập dữ liệu giám sát thích hợp và ghi nó vào kết quả đầu ra đích của trình giám sát (bảng, thư mục hoặc đường ống có đặt tên). Sự kiện hoặc bước chuyển trạng thái tự kiểm soát khi nào thì dữ liệu giám sát được thu thập; các quản trị viên cơ sở dữ liệu không cần phải thực hiện bất kỳ bước bổ sung thêm nào (không giống như khi sử dụng trình giám sát chụp nhanh).
### Buộc trình giám sát sự kiện sinh ra kết quả đầu ra
Đôi khi một trình giám sát sự kiện có tần số tạo bản ghi
thấp (chẳng hạn như một trình giám sát sự kiện được thiết kế để giám
sát sự kiện DATABASE), có thể chứa dữ liệu giám sát sự kiện trong bộ
nhớ mà chưa được ghi vào vị trí đích của trình giám sát sự kiện (vì
chỉ bản ghi sự kiện bộ phận là tồn tại). Để kiểm tra các nội dung của
các bộ đệm nội bộ đang hoạt động của trình giám sát sự kiện, bạn thi
hành câu lệnh SQL
FLUSH EVENT MONITOR. Cú
pháp cơ bản cho câu lệnh này là:
FLUSH EVENT MONITOR [
MonitorName] <BUFFER>
ở
đây
*MonitorName* là trình giám sát sự kiện (gọi bằng tên) mà bạn
muốn buộc nó phải ghi các nội dung của bộ đệm nội bộ đang hoạt động
của mình vào vị trí đích.
Để buộc trình giám sát sự kiện có tên
CONN_EVENTS phải ghi các nội dung của bộ đệm nội bộ đang hoạt động vào
vị trí đích của nó, bạn thi hành câu lệnh
FLUSH
EVENT MONITOR như sau:
FLUSH EVENT MONITOR CONN_EVENTS
Theo
mặc định, các bản ghi được ghi sớm vào một vị trí đích của trình giám
sát sự kiện sẽ được ghi nhật ký lại trong nhật ký của trình giám sát
sự kiện và được gán một mã định danh của bản ghi bộ phận. Tuy nhiên,
nếu bạn chỉ rõ tùy chọn
BUFFER khi thi hành
câu lệnh
FLUSH EVENT MONITOR thì chỉ các dữ
liệu giám sát có mặt trong bộ đệm nội bộ đang hoạt động của trình giám
sát sự kiện được ghi vào vị trí đích của trình giám sát sự kiện. Không
một bản ghi bộ phận nào được ghi nhật ký lại trong nhật ký của trình
giám sát sự kiện.
Điều quan trọng cần lưu ý là khi các trình
giám sát sự kiện được xả hết nội dung đã ghi nhớ, các bộ đếm không
được bắt đầu lại. Kết quả là, bản ghi giám sát sự kiện được sinh ra
tương ứng với câu lệnh
FLUSH EVENT MONITOR
không được thi hành vẫn sẽ được tạo ra khi trình giám sát sự kiện được
kích hoạt bình thường.
### Xem dữ liệu giám sát sự kiện
Trước đây bạn thấy rằng dữ liệu giám sát sự kiện có thể được ghi vào một trong ba vị trí khác nhau:
**Các tệp tin.**Kết quả đầu ra của trình giám sát sự kiện có thể được ghi vào một hay nhiều tệp tin. Hai tham số kiểm soát lượng không gian nhớ dành sẵn để sử dụng (MAXFILESIZE và MAXFILES) và một khi giới hạn không gian nhớ dành sẵn đã hết thì trình giám sát sự kiện sẽ tự động xả hết nội dung tất cả các sự kiện và tự ngừng lại. Thiết lập mặc định cho cả hai tham số là NONE, biểu thị rằng không có giới hạn về lượng không gian nhớ. **Các đường ống.**Kết quả đầu ra của trình giám sát sự kiện có thể được ghi vào một đường ống có đặt tên. Tên của đường ống phải được cung cấp, nhưng bản thân đường ống được đặt tên không cần phải tồn tại sẵn khi trình giám sát sự kiện được tạo ra. Tuy nhiên nó phải tồn tại khi trình giám sát sự kiện được kích hoạt. **Các bảng.**Kết quả đầu ra của trình giám sát sự kiện có thể được ghi vào một hay nhiều nhiều bảng có mặt trong cơ sở dữ liệu. Mỗi phần tử giám sát trong trình giám sát sự kiện được ánh xạ tới một bảng cùng tên. Dữ liệu của từng sự kiện riêng lẻ được đưa vào bảng thích hợp làm thành một hàng riêng.
Tại một thời điểm nào đó, bạn muốn xem xét dữ liệu mà trình giám sự kiện đã thu thập. Nếu dữ liệu thu thập được đã ghi vào một đường ống có đặt tên, thì ứng dụng tại đầu thu dữ liệu của đường ống thường có trách nhiệm hiển thị dữ liệu giám sát mà nó nhận được. Nếu dữ liệu thu thập được được ghi vào một bảng hoặc một tập hợp các tệp tin, thì bạn có thể xem dữ liệu đó bằng cách sử dụng một trong hai tiện ích đặc biệt: Trình phân tich sự kiện và công cụ tăng năng suất giám sát sự kiện.
Trình phân tích sự kiện là một công cụ giao diện người
dùng bằng đồ họa (GUI) có thể được kích hoạt bằng cách chọn trình giám
sát sự kiện mong muốn tại Trung tâm điều khiển và sau đó chọn hành
động thích hợp từ trình đơn Event Monitors hoặc bằng cách thi hành
lệnh
db2eva. Một khi được kích hoạt, trình
phân tích sự kiện cho phép bạn đi sâu xuống và xem các thông tin mà
một trình giám sát sự kiện cụ thể đã thu thập được. Hình 1 cho thấy
trình phân tích sự kiện trông ra sao khi nó lần đầu tiên được kích
hoạt.
##### Hình 1. Trình phân tích sự kiện
![ The Event Analyzer](event_analyzer.jpg)
Trình phân tích các sự kiện chỉ có thể được sử dụng để xem dữ liệu giám sát sự kiện đã được thu thập và được lưu trữ trong bảng cơ sở dữ liệu. Để xem dữ liệu giám sát sự kiện đã được ghi vào các tệp tin (và vào đường ống có đặt tên), bạn phải sử dụng các công cụ tăng năng xuất của trình giám sát sự kiện dạng văn bản, nó lấy ra các thông tin từ các tệp tin dữ liệu giám sát sự kiện hoặc từ đường ống có đặt tên và tạo ra một bản báo cáo đúng định dạng. (Các tệp tin của trình giám sát sự kiện và các đường ống có đặt tên có chứa các luồng dữ liệu nhị phân của nhóm dữ liệu lô gic cần phải được định dạng trước khi chúng có thể được hiển thị.)
Để kích hoạt công cụ tăng năng suất của trình
giám sát sự kiện, bạn thi hành lệnh
db2evmon. Cú pháp cơ bản của lệnh này như sau:
db2evmon -db [
DatabaseAlias] -evm [ MonitorName]
ở
đây
*DatabaseAlias* là cơ sở dữ liệu (gọi theo bí danh) mà trên
đó có định nghĩa trình giám sát sự kiện có dữ liệu cần hiển thị và
MonitorName là tên được gán cho trình giám sát sự kiện, có dữ liệu cần
hiển thị.
hoặc
db2evmon -path [
MonitorTarget]
ở
đây
*MonitorTarget* là vị trí (thư mục hoặc đường ống có đặt
tên), nơi lưu giữ dữ liệu được thu thập bởi trình giám sát sự kiện đã
chỉ rõ.
Ví dụ, để định dạng và hiển thị tất cả các dữ liệu được thu thập bởi một trình giám sát sự kiện có tên là CONN_EVENTS đã được định nghĩa trong một cơ sở dữ liệu có tên là SAMPLE, bạn thi hành lệnh sau đây (giả định là dữ liệu giám sát được ghi vào một tệp tin):
db2evmon -db SAMPLE -evm CONN_EVENTS
Giả sử trình giám sát kiện có tên là CONN_EVENTS được tạo ra bằng cách thực hiện câu lệnh SQL sau:
CREATE EVENT MONITOR CONN_EVENTS FOR CONNECTIONS
WRITE TO FILE 'C:\MONDATA' AUTOSTART
Và giả định một ứng dụng đã thiết lập một kết nối đến cơ sở dữ liệu SAMPLE (động tác này làm cho trình giám sát sự kiện thu thập và sinh ra dữ liệu giám sát), kết quả đầu ra được tạo ra khi sử dụng công cụ tăng năng suất của trình giám sát sự kiện để xem xét dữ liệu đó sẽ giống như ví dụ dưới đây.
##### Ví dụ kết quả đầu ra được tạo ra bởi công cụ tăng năng suất của trình giám sát sự kiện
Reading C:\mondata\00000000.EVT ... -------------------------------------------------------------------------- EVENT LOG HEADER Event Monitor name: CONN_EVENTS Server Product ID: SQL09000 Version of event monitor data: 8 Byte order: LITTLE ENDIAN Number of nodes in db2 instance: 1 Codepage of database: 1208 Territory code of database: 1 Server instance name: DB2 -------------------------------------------------------------------------- -------------------------------------------------------------------------- Database Name: SAMPLE Database Path: C:\DB2\NODE0000\SQL00002\ First connection timestamp: 06/22/2006 00:56:40.086671 Event Monitor Start time: 06/22/2006 00:56:40.662668 -------------------------------------------------------------------------- 3) Connection Header Event ... Appl Handle: 55 Appl Id: *LOCAL.DB2.060622045634 Appl Seq number: 00001 DRDA AS Correlation Token: *LOCAL.DB2.060622045634 Program Name : db2bp.exe Authorization Id: RSANDERS Execution Id : RSANDERS Codepage Id: 1252 Territory code: 0 Client Process Id: 1992 Client Database Alias: SAMPLE Client Product Id: SQL09000 Client Platform: Unknown Client Communication Protocol: Local Client Network Name: rsanders-lxp Connect timestamp: 06/22/2006 00:56:40.086671 4) Connection Event ... -------------------------------------------------------------------------- Database Name: SAMPLE Database Path: C:\DB2\NODE0000\SQL00002\ First connection timestamp: 06/22/2006 00:57:36.727014 Event Monitor Start time: 06/22/2006 00:57:37.223404 --------------------------------------------------------------------------
### Các chỉ dẫn cách sử dụng trình giám sát sự kiện
Các trình giám sát sự kiện chỉ nên được sử dụng để giám sát các sự kiện cụ thể hoặc các luồng công việc ngắn. Chúng được thiết kế để cung cấp thông tin rất cụ thể, có thể được sử dụng để chẩn đoán các vấn đề hoặc các hành vi không mong muốn của một cơ sở dữ liệu hay ứng dụng.
Không giống như các trình chụp nhanh, trình giám sát sự kiện có tác động vô cùng lớn đến hiệu năng. Đây là do số lượng thông tin được ghi ra cho từng đối tượng sự kiện. Thêm vào đó, trình giám sát sự kiện của câu lệnh SQL gây ra một tác động thậm chí còn nặng nề hơn đối với hiệu năng bởi vì có những công việc phụ thêm mà máy cơ sở dữ liệu phải thực hiện mỗi khi một truy vấn được thi hành: thay vì chỉ cần đơn giản thực thi một câu truy vấn, Trình quản lý cơ sở dữ liệu DB2 cũng phải tạo ra và ghi lại tất cả các đặc trưng và thông tin thời gian chạy kết hợp với truy vấn. Nếu thông tin này được ghi vào một tệp tin văn bản, thì thậm chí nó làm máy tính chạy chậm hơn nữa.
Nói về các tệp tin, khi tạo các trình giám sát sự kiện ghi dữ liệu vào tệp tin, thì việc đặt giới hạn cho kích thước tệp tin là một ý tưởng tốt để kiểm soát lượng không gian đĩa mà kết quả đầu ra của trình giám sát sự kiện sẽ tiêu thụ. Mặt khác, nếu bạn đang giám sát một hệ thống xử lý giao dịch trực tuyến (OLTP) khối lượng lớn, thì kểt quả đầu ra có thể nhanh chóng tăng lên đến hàng trăm megabyte.
Một trong những cách sử dụng phổ biến nhất của trình giám sát sự kiện là thu giữ các thông tin về khóa chết. (Trình giám sát sự kiện khóa chết không viết ra nhiều dữ liệu và chỉ thỉnh thoảng được kích hoạt, do vậy có thể chấp nhận không áp đặt giới hạn kích thước tệp tin). Nếu không sử dụng một trình giám sát sự kiện, thì ta gần như không thể xác định chính xác được những khóa nào và các ứng dụng nào dính líu đến chu trình khóa chết. Trình giám sát sự kiện khóa chết sẽ thu thập các thông tin về tất cả các ứng dụng và các khóa của chúng khi một chu trình khóa chết xảy ra. Được trang bị các thông tin này, chính câu lệnh SQL đã gây ra chu trình khóa chết sẽ được giám sát hoặc được thay đổi để sửa chữa tình hình. Bạn đừng quên rằng ứng dụng mà DB2 gán nhãn là nguyên nhân gây ra khóa chết chỉ là ứng dụng cuối cùng dính líu đến chu trình khóa chết - nguyên nhân thực sự có thể là một giao dịch đã được bắt đầu sớm hơn nhiều bởi một ứng dụng khác. Bạn phải đảm bảo rằng mình đã xem xét tất cả các khóa và các ứng dụng dính líu đến để xác định một cách chính xác vấn đề khởi nguồn từ đâu.
Cách sử dụng phổ biến thứ hai của các trình giám sát sự kiện là theo vết quá trình xử lý câu lệnh SQL. Trình giám sát sự kiện của câu lệnh SQL có thể khá hữu ích vì nó bẫy cả câu lệnh SQL động và tĩnh. Đây là điều cốt yếu nếu một ứng dụng sử dụng các câu lệnh SQL được tiền biên dịch, các câu lệnh này không thu giữ được bằng cách sử dụng hình chụp nhanh câu lệnh SQL. Khi một trình giám sát sự kiện được sử dụng để thu giữ thông tin về mọi câu lệnh SQL đang được thi hành, thì các tính chất của từng câu lệnh, như số hàng đã được đọc, được chọn, được xóa, v.v, được ghi lại, và không được trình bày dưới dạng tổng gộp giống như trường hợp thu giữ bằng hình chụp nhanh. Hơn nữa, bởi vì khung thời gian thi hành và thời điểm bắt đầu và dừng xử lý cũng được ghi lại, nên có thể thực hiện các phân tích chi tiết các giao dịch và cách mà một ứng dụng thực hiện câu lệnh SQL ảnh hưởng đến việc thực hiện câu lệnh SQL bởi các ứng dụng khác như thế nào. Tuy nhiên, vì lý do khối lượng thông tin được tạo ra và tải công việc cần phải thực hiện thêm để chạy một trình giám sát câu lệnh SQL, nên một trình giám sát như vậy chỉ nên được sử dụng cho các kiểm thử ngắn hoặc để xác định vấn đề, và chúng không nên được dùng trong môi trường sản xuất.
## Giám sát tình trạng sức khỏe của máy tính và Trung tâm sức khỏe của máy tính
### Giám sát tình trạng sức khỏe của máy tính
Mặc dù trình giám sát chụp nhanh và
trình giám sát sự kiện làm việc một cách khác nhau (trình giám sát
chụp nhanh được sử dụng để thu giữ thông tin về tình trạng hiện thời
của một cá thể và/hoặc của cơ sở dữ liệu tại một điểm nhất định, còn
trình giám sát sự kiện được sử dụng để thu thập dữ liệu giám sát khi
các sự kiện hoặc bước chuyển trạng thái cụ thể xảy ra), chúng có một
điểm chung, đó là cả hai đều được thiết kế để giúp xác định các khu
vực có vấn đề và
*đã* ảnh hưởng xấu đến hiệu năng của một hệ
thống cơ sở dữ liệu. Với phiên bản UDB DB2 8.1, IBM đã đưa thêm vào
một công cụ mới để giúp các quản trị viên cơ sở dữ liệu giám sát tình
trạng của hệ thống UDB DB2: *trình giám sát sức khỏe máy tính*.
Công cụ này bổ sung thêm *khả năng quản lý bằng ngoại lệ* cho DB2
9 bằng cách cảnh báo cho các quản trị viên về các vấn đề tiềm tàng
liên quan đến trình trạng sức khỏe của hệ thống *trước khi* chúng
trở thành các vấn đề ảnh hưởng đến hiệu năng của hệ thống.
Trình giám sát sức khỏe hệ thống đảo ngược mô hình chẩn đoán tình trạng sức khỏe của hệ thống từ mô hình của một quản trị viên nhằm tìm kiếm nguồn gốc của vấn đề đang tồn tại bằng cách cho chạy trình giám sát chụp nhanh và trình giám sát sự kiện tại các thời điểm khác nhau và phân tích một lượng lớn các dữ liệu để tìm kiếm các chỉ báo về tình trạng yếu kém của hệ thống để DB2 tự giám sát bản thân nó và thông báo cho các nhân viên đã chọn lựa chỉ khi hệ thống gặp phải các tình trạng yếu kém hiện tại hoặc tiềm tàng.
### Trình giám sát sức khỏe máy tính làm việc như thế nào
Trình giám sát tình trạng sức khỏe hệ thống là một công cụ phía máy chủ, nó chạy lặng lẽ tại nền sau của hệ thống và liên tục giám sát tình trạng sức khỏe của cả cá thể trình quản lý cơ sở dữ liệu DB2 lẫn của bất kỳ cơ sở dữ liệu nào thuộc quyền kiểm soát của nó. Không giống như trình giám sát hệ thống cơ sở dữ liệu, mà khi sử dụng nó phải chịu thêm tải công việc xử lý bổ sung, trình giám sát sức khỏe hệ thống lợi dụng công nghệ giám sát mới, không có tác động đáng kể đến hiệu năng. Và trình giám sát sức khỏe không đòi hỏi có sự can thiệp của người sử dụng (một sự khác biệt nữa giữa nó và trình giám sát hệ thống cơ sở dữ liệu).
Trình giám sát sức khỏe hệ
thống sử dụng một số
*chỉ báo về sức khỏe* để đánh giá một số
khía cạnh cụ thể về hiệu năng của cá thể và của cơ sở dữ liệu. Mỗi chỉ
báo về sức khỏe hệ thống hoạt động giống như một phép đo chính xác mà
trình giám sát sức khỏe hệ thống sẽ kiểm tra liên tục để đo lường tình
trạng sức khỏe của một khía cạnh cụ thể của một lớp các đối tượng cơ
sở dữ liệu cụ thể. Đến lượt mình, các chỉ báo tình trạng sức khỏe đo
đạc một tập hữu hạn các trạng thái của các đối tượng riêng biệt hoặc
một dải liên tục các giá trị để xác định xem một đối tượng cụ thể có
"khỏe mạnh" hay "không khỏe mạnh". Các chỉ báo tình trạng sức khỏe có
một bộ các giá trị ngưỡng định sẵn, và trình giám sát tình trạng sức
khỏe thường xuyên so sánh trạng thái của hệ thống với các ngưỡng đó -
bạn có thể sửa đổi các ngưỡng giá trị này để đáp ứng nhu cầu riêng của
bạn. Nếu trình giám sát sức khỏe hệ thống thấy rằng một ngưỡng giới
hạn cụ thể nào đó đã bị vượt quá (ví dụ: lượng không gian nhớ dành cho
nhật ký tụt xuống dưới một mức nhất định) hoặc phát hiện ra tình trạng
bất thường của một đối tượng cụ thể (ví dụ, một cá thể ngừng hoạt
động), nó sẽ tự động phát ra cảnh báo thông qua các kênh báo cáo đã
chỉ định. Có các chỉ báo sức khỏe dành cho các thành phần sau:
- Cá thể (trình quản lý cơ sở dữ liệu)
- Cơ sở dữ liệu
- Nhật ký
- Lưu trữ vùng bảng
- Sắp xếp
- Bộ nhớ sẵn (caches) dành cho gói và danh mục
- Vùng làm việc
- Bộ nhớ
- Tương tranh các ứng dụng
Trình giám sát tình trạng sức khỏe có thể tạo ra ba loại cảnh báo:
chú ý
*(attention)*, cảnh báo *(warning)* và báo động
*(alarm)*. Các chỉ báo trình trạng sức khỏe đo các trạng thái
riêng lẻ sẽ đưa ra một cảnh báo bất cứ khi nào một tình trạng bất bình
thường được đăng ký; các chỉ báo tình trạng sức khỏe đo một dải liên
tục các giá trị, sử dụng các giá trị ngưỡng để xác định ranh giới
(hoặc vùng) cho các trạng thái: bình thường, chú ý, cảnh báo, và báo
động. Ví dụ: nếu một giá trị của chỉ báo tình trạng sức khỏe lọt vào
ngưỡng xác định đây là khu vực báo động, thì báo động sẽ được phát ra,
biểu thị rằng vấn đề này cần phải được chú ý ngay lập tức.
Bất cứ lúc nào một báo hiệu được phát ra, trình giám sát tình trạng sức khỏe hệ thống có thể thực hiện bất kỳ một trong số các hành động sau đây để báo cáo nó:
- Ghi lại các thông tin báo hiệu vào trong sổ nhật ký (Journal - tất cả các báo hiệu mức báo động được ghi vào sổ nhật ký)
- Gửi thông báo báo hiệu qua e-mail hay máy nhắn tin tới người chịu trách nhiệm về hệ thống
- Thực hiện một hoặc nhiều hành động đã được định cấu hình sẵn (ví dụ: chạy một tác vụ)
Theo mặc định, trình giám sát tình trạng sức khỏe hệ thống bị tắt
đi khi một cá thể lần đầu tiên tạo ra. Tuy nhiên, bạn có thể bật nó
lên bất kỳ lúc nào bằng cách chọn mục trình đơn thích hợp từ Trung tâm
sức khỏe (Health Center) hoặc bằng cách gán giá trị
**ON** cho tham
số cấu hình *health_mon* của trình quản lý cơ sở dữ liệu DB2.
Điều quan trọng là cần lưu ý rằng một khi trình giám sát tình
trạng sức khỏe hệ thống đã được kích hoạt, nếu nó tạo ra một báo hiệu
trong khi bất kỳ một công cụ giao diện DB2 nào đang hoạt động, thì
người dùng sẽ được báo hiệu bằng cách sử dụng biểu tượng
*Health
Beacon*. Health Beacon chỉ đơn giản là một biểu tượng dạng nút
nhấn xuất hiện trên dòng trạng thái của một cửa sổ hoặc của sổ ghi
chép (notebook) - bằng cách nhấn vào biểu tượng Health Beacon, điều
khiển ngay lập tức được chuyển cho Trung tâm sức khỏe (Health Center -
mà bạn sẽ xem xét trong phần tiếp theo), nơi bạn có thể nhận được các
thông tin bổ sung về các báo hiệu (và các khuyến cáo để giải quyết
tình hình đã gây ra các báo nguy ấy).
### Trung tâm sức khỏe hệ thống (Health Center)
Trung tâm sức khỏe hệ thống là một công cụ GUI được thiết kế để tương tác với các trình giám sát sức khỏe hệ thống. Hình 2 là hình ảnh của Trung tâm sức khỏe hệ thống khi nó được kích hoạt lần đầu tiên trên một hệ thống Windows XP (trong trường hợp này chưa có cảnh báo nào được tạo ra).
##### Hình 2. Trung tâm sức khỏe hệ thống
![ The Health Center](health_center_startup.jpg)
Giống như nhiều công cụ GUI được cung cấp cùng với DB2 9, Trung tâm sức
khỏe hệ thống gồm có một
*ô các đối tượng* (ở phía bên trái của
màn hình Trung tâm sức khỏe hệ thống) và một *ô các nội dung * (ở
phía bên phải của Trung tâm sức khỏe hệ thống). Những ô này hiển thị
các thông tin khác nhau về tình trạng sức khỏe hệ thống, bao gồm: **Trạng thái của môi trường cơ sở dữ liệu.**Một biểu tượng nằm ở bên cạnh mỗi đối tượng được hiển thị tại ô các đối tượng xác định mức cảnh báo cao nhất đã sinh ra dành cho đối tượng (hoặc dành cho bất kỳ đối tượng nào do nó quản lý). Biểu tượng hình thoi màu xanh bên cạnh đối tượng có nghĩa là đối tượng này và bất kỳ đối tượng nào dưới sự kiểm soát của nó chưa đưa ra bất kỳ cảnh báo nào. Bạn có thể sử dụng các nút bật/tắt ở trên đỉnh của ô các đối tượng để lọc cảnh báo theo mức độ nghiêm trọng của chúng. **Cảnh báo được tạo ra cho một cá thể hay một cơ sở dữ liệu.**Khi bạn chọn một đối tượng tại cây điều hướng trong ô các đối tượng, các cảnh báo cho đối tượng này được hiển thị trong ô nội dung ở bên phải. **Các thông tin cảnh báo chi tiết và các hành động khuyến cáo nên dùng.**Khi bạn nhấn đúp chuột lên bất kỳ cảnh báo nào được hiển thị trong ô nội dung, một sổ ghi chép (notebook) có chứa các thông tin chi tiết về cảnh báo xuất hiện. Trang đầu tiên của sổ ghi chép này có chứa các chi tiết về cảnh báo; trang thứ hai chứa danh sách các hành động được khuyến cáo nên làm theo để giải quyết các cảnh báo. Trong hầu hết trường hợp, bạn có thể thực hiện một trong số các hành động khuyên dùng trực tiếp ngay từ sổ ghi chép. Ví dụ, nếu hành động được khuyên dùng là tạo ra một thay đổi đối với trình quản lý cơ sở dữ liệu DB2 hoặc đối với cấu hình của cơ sở dữ liệu, thì Trung tâm sức khỏe hệ thống hiển thị các giá trị cấu hình mới cùng với một nút mà bạn có thể nhấn lên để tạo thay đổi. Trong các trường hợp khác, Trung tâm sức khỏe hệ thống có thể khuyên bạn nên tiếp tục điều tra vấn đề bằng cách sử dụng một công cụ, chẳng hạn như trình xử lý dòng lệnh (CLP) hay trình trực quan bộ nhớ (Memory Visualizer).
Bạn có thể kích hoạt Trung tâm sức khỏe hệ thống bất cứ lúc nào
bằng cách chọn một hành động của Trung tâm sức khỏe hệ thống từ trình
đơn Tools của một công cụ GUI DB2 9 khác, hoặc bằng cách chọn biểu
tượng thích hợp từ thanh công cụ của một công cụ GUI khác của DB2 9,
hoặc bằng cách thi hành lệnh
db2hc từ CLP.
Trên hệ thống Windows, bạn cũng có thể kích hoạt Trung tâm sức khỏe hệ
thống bằng cách nhấn vào nút
**Start** và chọn **Start >
Programs > IBM DB2 > Monitoring Tools > Health
Center**.
Lưu ý: DB2 9 chứa một công cụ được gọi là
*Trung
tâm sức khỏe hệ thống Web*, bao gồm tất cả các khả năng của
Trung tâm sức khỏe hệ thống và bổ sung thêm khả năng truy cập thông
tin giám sát sức khỏe hệ thống một cách trực tiếp từ một trình duyệt
web hoặc từ PDA.
### Kích hoạt các chỉ báo tình trạng sức khỏe hệ thống và xác định các hành động sự kiện
Từ Trung tâm sức khỏe hệ thống, bạn có thể chọn cá thể (trình quản lý cơ sở dữ liệu) và các đối tượng cơ sở dữ liệu mà bạn muốn giám sát, tùy chỉnh các thiết lập ngưỡng của bất kỳ chỉ báo sức khỏe hệ thống nào, chỉ định các thông báo sẽ được gửi đến đâu và định nghĩa hành động nào sẽ được thực hiện nếu một cảnh báo được phát ra. Theo mặc định, hầu hết các chỉ báo về sức khỏe hệ thống chưa được kích hoạt khi trình giám sát sức khỏe hệ thống được cài đặt. Để kích hoạt chỉ báo sức khỏe hệ thống hoặc thay đổi các giá trị ngưỡng của một chỉ báo sức khỏe hệ thống, trước tiên bạn phải truy cập vào cửa sổ cấu hình cho chỉ báo tình trạng sức khỏe của đối tượng của Trung tâm sức khỏe hệ thống, được minh họa tại hình 3.
##### Hình 3. Cửa sổ cấu hình cho chỉ báo tình trạng sức khỏe của đối tượng
![ Object Health Indicator Configuration](object_hi_config.jpg)
Để kích hoạt một chỉ báo sức khỏe hệ thống, bạn chỉ cần nhấn đúp chuột vào chỉ báo sức khỏe hệ thống thích hợp tại cửa sổ cấu hình cho chỉ báo tình trạng sức khỏe của đối tượng và khi cửa sổ cấu hình chỉ báo sức khỏe hệ thống hiển thị, như thấy trong hình 4, bạn nhấn chọn hộp Evaluate.
##### Hình 4. Cửa sổ Configure Health Indicator
![ Configure Health Indicator window](configure_hi_thresholds.jpg)
Bằng cách sử dụng cửa sổ cấu hình chỉ báo sức khỏe hệ thống, bạn cũng có thể xác định hành động nào sẽ được thực hiện khi ngưỡng giới hạn cho một chỉ báo tình trạng sức khỏe bị vượt quá. Hình 5 cho thấy cửa sổ định cấu hình chỉ báo sức khỏe và các trường được sử dụng để xác định các hành động sẽ được thực hiện khi các cảnh báo khác nhau được sinh ra.
##### Hình 5. Cửa sổ cấu hình chỉ báo sức khỏe hệ thống
![ Configure Health Indicator window](configure_hi_actions.jpg)
## Phân tích SQL với tiện ích giải nghĩa
### Tiện ích giải nghĩa là gì ?
Khi một câu lệnh SQL được gửi đến máy cơ sở dữ liệu DB2 để xử lý, nó được phân tích bởi Trình tối ưu hoá của DB2 để tạo ra cái được gọi là là kế hoạch truy cập. Mỗi kế hoạch truy cập chứa các thông tin chi tiết về chiến lược sẽ được sử dụng để thi hành các câu lệnh (chẳng hạn như có sử dụng hay không sử dụng các chỉ mục, sẽ yêu cầu phương pháp sắp xếp nào, nếu có, những khóa nào là cần thiết, và các phương pháp nối (join) nào, nếu có, sẽ được sử dụng). Nếu câu lệnh SQL được mã hóa trong một ứng dụng, thì kế hoạch truy cập được tạo ra vào thời điểm tiền biên dịch (hoặc tại thời điểm kết buộc nếu áp dụng phương thức kết buộc muộn) và một dạng kế hoạch truy cập có thể thi hành được đã sinh ra sẽ được lưu trữ trong danh mục hệ thống như một đối tượng được biết đến như là một gói. Tuy nhiên, nếu câu lệnh được gửi lên từ CLP hoặc nếu câu lệnh là một câu lệnh SQL động trong một chương trình ứng dụng (nói cách khác, một câu lệnh SQL được xây dựng vào thời gian chạy ứng dụng), thì kế hoạch truy cập được tạo ra ở thời điểm mà câu lệnh được phát ra và dạng sẵn sàng chạy được đã sinh ra sẽ được lưu trữ tạm thời trong bộ nhớ (trong bộ nhớ sẵn của gói tổng thể) thay vì ở trong các danh mục hệ thống. (Nếu một câu lệnh SQL được phát ra và dạng sẵn sàng chạy được của kế hoạch truy cập của nó đã tồn tại trong bộ nhớ sẵn của gói tổng thể, thì kế hoạch truy cập hiện tại được tái sử dụng và trình tối ưu hoá của DB2 không được gọi ra lần nữa.)
Tại sao điều này lại quan trọng? Bởi vì, mặc dù trình giám sát hệ thống cơ sở dữ liệu và trình giám sát sức khỏe hệ thống có thể được sử dụng để lấy được thông tin để biết một số lệnh SQL thực hiện tốt (hoặc tồi tệ) như thế nào, chúng không thể được sử dụng để phân tích các câu lệnh SQL riêng lẻ. Để thực hiện loại phân tích này, bạn phải có khả năng thu giữ và xem các thông tin được lưu trữ trong kế hoạch truy cập của một câu lệnh SQL. Và để thu giữ và xem thông tin về kế hoạch truy cập, bạn phải sử dụng tiện ích giải nghĩa của DB2 9.
Tiện ích giải nghĩa cho phép bạn thu giữ và xem thông tin chi tiết về kế hoạch truy cập đã được chọn cho một câu lệnh SQL cụ thể, cũng như các thông tin về hiệu năng có thể được sử dụng để giúp nhận biết các câu lệnh viết kém hoặc các yếu kém trong thiết kế cơ sở dữ liệu. Cụ thể là dữ liệu giải nghĩa sẽ giúp bạn hiểu cách mà trình quản lý cơ sở dữ liệu của DB2 truy cập vào bảng và các chỉ mục để đáp ứng một truy vấn. Dữ liệu giải nghĩa cũng có thể được sử dụng để đánh giá bất kỳ hành động điều chỉnh hiệu năng nào. Trong thực tế, bất cứ lúc nào bạn thay đổi một số phương diện của trình quản lý cơ sở dữ liệu của DB2, của câu lệnh SQL, hoặc của cơ sở dữ liệu mà câu lệnh tương tác với nó, thì bạn nên thu thập và xem xét dữ liệu giải nghĩa để tìm hiểu xem các thay đổi của bạn đã có tác động như thế nào đối với hiệu năng.
### Các bảng giải nghĩa
Trước khi các thông tin giải nghĩa có thể được thu giữ, thì một tập hợp
đặc biệt các bảng, được gọi là
*các bảng giải nghĩa*, phải được
tạo ra. Trong bảng 4 bạn có thể xem từng bảng giải nghĩa được sử dụng,
cùng với các thông tin mà nó được thiết kế để lưu giữ.
##### Bảng 4. Các bảng giải nghĩa
|Tên bảng||Nội dung|
|EXPLAIN_ARGUMENT||Chứa các đặc trưng duy nhất cho mỗi toán tử riêng lẻ được sử dụng, nếu có.|
|EXPLAIN_INSTANCE||Chứa các thông tin cơ bản về nguồn gốc của các lệnh SQL được diến giải cũng như thông tin về môi trường mà diễn giải đã diễn ra. (Bảng EXPLAIN_INSTANCE là bảng điều khiển chính cho tất cả các thông tin diễn giải. Mỗi hàng của dữ liệu trong bảng giải nghĩa khác giải được liên kết rõ ràng với một hàng duy nhất trong bảng này.)|
|EXPLAIN_OBJECT||Chứa thông tin về các đối tượng dữ liệu mà kế hoạch truy cập yêu cầu được tạo ra cho câu lệnh SQL.|
|EXPLAIN_OPERATOR||Chứa tất cả các toán tử mà trình biên dịch SQL cần để thỏa mãn câu lệnh SQL.|
|EXPLAIN_PREDICATE||Chứa thông tin xác định những vị từ nào được áp dụng bởi một toán tử cụ thể.|
|EXPLAIN_STATEMENT||Chứa các văn bản của câu lệnh SQL vì nó tồn tại cho các cấp độ khác nhau của thông tin diễn giải. Câu lệnh SQL gốc được người sử dụng nhập vào được lưu trữ trong bảng này cùng với các phiên bản được trình tối ưu hoá DB2 sử dụng để lựa chọn một kế hoạch truy cập để thỏa mãn câu lệnh SQL. (Các phiên bản sau này có thể giống một chút với phiên bản gốc, vì nó có thể đã được viết lại và/hoặc được tăng cường với vị từ bổ sung bởi trình tiền biên dịch SQL.)|
|EXPLAIN_STREAM||Chứa các thông tin về các luồng dữ liệu tồn đầu vào và đầu ra tồn tại giữa các toán tử riêng biệt cá nhân và các đối tượng dữ liệu. (Bản thân các đối tượng dữ liệu được biểu diễn trong bảng EXPLAIN_OBJECT trong khi các toán tử tham gia vào một luồng dữ liệu có thể được tìm thấy trong bảng EXPLAIN_OPERATOR.)|
Thông thường, các bảng giải nghĩa được sử dụng trong một cơ sở dữ liệu phát triển để giúp đỡ trong thiết kế ứng dụng, chứ không phải trong cơ sở dữ liệu sản xuất, ở đây mã ứng dụng vẫn còn khá tĩnh. Do vậy, chúng không được tạo ra cùng với các bảng danh mục hệ thống như là một phần của quá trình tạo cơ sở dữ liệu. Thay vào đó, bảng giải nghĩa phải được tạo ra một cách thủ công trong cơ sở dữ liệu sẽ sử dụng tiện ích giải nghĩa trước khi tiện ích giải nghĩa có thể được sử dụng. May mắn thay, quá trình được áp dụng để tạo ra các bảng giải nghĩa khá đơn giản: bằng cách sử dụng CLP, bạn thiết lập kết nối đến các cơ sở dữ liệu phù hợp và thi hành một kịch bản lệnh có tên là EXPLAIN.DDL, kịch bản lệnh này có thể được tìm thấy trong thư mục con "misc" của thư mục “sqllib” nơi mà các phần mềm DB2 9 được cài đặt ban đầu. (Các lời chú thích trong phần đầu của tệp tin này cung cấp các thông tin về cách thi hành nó.)
### Thu thập dữ liệu giải nghĩa
Tiện ích giải nghĩa bao gồm một số công cụ riêng lẻ và không phải tất cả các công cụ đều yêu cầu cùng một loại dữ liệu giải nghĩa. Do đó, hai kiểu dữ liệu giải nghĩa khác nhau có thể được thu thập:
**Dữ liệu giải nghĩa toàn diện.**Chứa thông tin chi tiết về kế hoạch truy cập của một câu lệnh SQL. Thông tin này được lưu trữ trên nhiều bảng giải nghĩa khác nhau. **Dữ liệu chụp nhanh giải nghĩa .**Chứa biểu diễn nội bộ hiện thời của một câu lệnh SQL, cùng với bất kỳ thông tin liên quan nào. Thông tin này được lưu trữ trong cột SNAPSHOT của bảng giải nghĩa EXPLAIN_STATEMENT.
Như bạn có thể hình dung, có nhiều cách khác nhau để có thể thu thập cả hai loại dữ liệu giải nghĩa đó. Các phương thức có sẵn để thu thập dữ liệu giải nghĩa bao gồm:
- Thi hành câu lệnh SQL
EXPLAIN
- Thiết lập mục đăng ký đặc biệt
CURRENT EXPLAIN MODE
- Thiết lập mục đăng ký đặc biệt
CURRENT EXPLAIN SNAPSHOT
- Sử dụng tùy chọn kết buộc
EXPLAINvới lệnh
PRECOMPILEhoặc
BIND
- Sử dụng tùy chọn kết buộc
EXPLSNAPvới lệnh
PRECOMPILEhoặc
BIND
### Câu lệnh SQL EXPLAIN
Một cách để thu thập cả thông tin giải nghĩa toàn diện lẫn dữ liệu chụp
nhanh giải nghĩa cho một câu lệnh SQL động, đơn lẻ là thi hành câu
lệnh SQL
EXPLAIN. Cú pháp cơ bản cho câu
lệnh này là:
EXPLAIN [ALL | PLAN | PLAN SELECTION] <FOR SNAPSHOT | WITH SNAPSHOT> FOR [
SQLStatement]
ở đây
*SQLStatement* là câu lệnh SQL mà dữ liệu giải nghĩa và/hoặc
dữ liệu chụp nhanh giải nghĩa được thu thập cho nó. (Các câu lệnh được
chỉ định phải là câu lệnh SQL hợp lệ:
INSERT,
UPDATE,
DELETE,
SELECT,
SELECT INTO,
VALUES hoặc
VALUES INTO.)
Nếu tùy chọn
FOR SNAPSHOT được chỉ rõ với
câu lệnh
EXPLAIN thì chỉ có các thông tin
chụp nhanh giải nghĩa được thu thập cho câu lệnh SQL động đã chỉ định.
Mặt khác, nếu thay vào đó, tùy chọn
WITH
SNAPSHOT được chỉ định cho câu lệnh trên, thì cả thông tin
giải nghĩa toàn diện lẫn dữ liệu chụp nhanh giải nghĩa được thu thập
cho câu lệnh SQL động đã chỉ định. Tuy nhiên, nếu không một tùy chọn
nào được sử dụng, thì chỉ có dữ liệu giải nghĩa toàn diện được thu
thập, không có dữ liệu chụp nhanh giải nghĩa nào được tạo ra.
Để thu thập cả dữ liệu giải nghĩa toàn diện lẫn thông tin chụp nhanh
giải nghĩa cho câu lệnh SQL
SELECT * FROM
DEPARTMENT, bạn thi hành câu lệnh
EXPLAIN sau:
EXPLAIN ALL WITH SNAPSHOT FOR SELECT * FROM DEPARTMENT
Mặt khác, để chỉ thu thập dữ liệu chụp nhanh giải nghĩa cho cùng câu
lệnh SQL trên, hãy thi hành câu lệnh
EXPLAIN sau:
EXPLAIN ALL FOR SNAPSHOT FOR SELECT * FROM DEPARTMENT
Và cuối cùng, để chỉ thu thập dữ liệu giải nghĩa toàn diện cho câu lệnh
SQL
SELECT * FROM DEPARTMENT, bạn thi hành
câu lệnh
EXPLAIN sau:
EXPLAIN ALL FOR SELECT * FROM DEPARTMENT
Điều quan trọng cần lưu ý là câu lệnh
EXPLAIN không thi hành câu lệnh SQL đã chỉ định, cũng
không hiển thị thông tin giải nghĩa thu thập được. Phải sử dụng các
công cụ tiện ích giải nghĩa khác để xem các thông tin thu thập được.
(Chúng ta sẽ xem xét các công cụ này ngay sau đây.)
### Các mục đăng ký đặc biệt CURRENT EXPLAIN MODE và CURRENT EXPLAIN SNAPSHOT
Mặc dù câu lệnh SQL
EXPLAIN rất hữu ích khi
bạn muốn thu thập các thông tin giải nghĩa và/hoặc các thông tin chụp
nhanh giải nghĩa cho một câu lệnh SQL động, đơn lẻ, nếu có một số
lượng lớn các câu lệnh SQL cần phải được phân tích thì sử dụng câu
lệnh đó có thể trở nên rất tốn thời gian. Cách tốt hơn để thu thập
cũng các thông tin ấy cho nhiều câu lệnh SQL động là thiết lập một
hoặc cả hai mục đăng ký đặc biệt của tiện ích giải nghĩa được cung cấp
trước khi một nhóm các câu lệnh SQL động được thi hành. Sau đó, khi
câu lệnh được chuẩn bị để thi hành, các thông tin giải nghĩa và/hoặc
thông tin chụp nhanh giải nghĩa sẽ được thu thập cho từng câu lệnh
được xử lý. (Tuy nhiên bản thân câu lệnh có thể được hoặc không được
thi hành một khi các thông tin giải nghĩa và/hoặc thông tin chụp nhanh
giải nghĩa được thu thập.)
Hai mục đăng ký đặc biệt của tiện ích giải nghĩa được sử dụng theo cách
này là mục đăng ký
CURRENT EXPLAIN MODE và
CURRENT EXPLAIN SNAPSHOT. Mục đăng ký
đặc biệt
CURRENT EXPLAIN MODE được thiết
lập bằng cách sử dụng câu lệnh SQL
SET CURRENT
EXPLAIN MODE và mục đăng ký đặc biệt
CURRENT EXPLAIN SNAPSHOT được thiết lập bằng cách sử dụng
câu lệnh SQL
SET CURRENT EXPLAIN SNAPSHOT.
Cú pháp cơ bản cho câu lệnh SQL
SET CURRENT
EXPLAIN MODE là:
SET CURRENT EXPLAIN MODE <=> [NO | YES | EXPLAIN | REOPT | RECOMMEND INDEXES | EVALUATE INDEXES | RECOMMEND PARTITIONINGS | EVALUATE PARTITIONINGS]
Cú pháp cơ bản cho câu lệnh SQL
SET CURRENT EXPLAIN
SNAPSHOT SQL là:
SET CURRENT EXPLAIN SNAPSHOT <=> [YES | NO | EXPLAIN | REOPT]
Như bạn có thể hình dung, nếu cả hai mục đăng ký đặc biệt
CURRENT EXPLAIN MODE và
CURRENT EXPLAIN SNAPSHOT được đặt ở trạng thái
NO, thì tiện ích giải nghĩa bị vô hiệu hóa và
ta không thu giữ được dữ liệu giải nghĩa. Mặt khác, nếu một trong hai
mục đăng ký đặc biệt được đặt là
EXPLAIN,
thì tiện ích giải nghĩa được kích hoạt và thông tin giải nghĩa toàn
diện hoặc dữ liệu chụp nhanh giải nghĩa (hoặc cả hai nếu cả hai mục
đăng ký đặc biệt được thiết lập) được thu thập mỗi khi một câu lệnh
SQL động được chuẩn bị để thực thi. Tuy nhiên, bản thân câu lệnh không
được thi hành. Nếu một trong hai mục đăng ký đặc biệt được đặt ở trạng
thái
**YES**, thì kết quả sẽ tương tự như khi một trong hai mục
đăng ký được đặt ở trạng thái
EXPLAIN với
một sự khác biệt đáng kể; các câu lệnh SQL động được thu thập các
thông tin giải nghĩa được thực hiện ngay khi các dữ liệu giải nghĩa
hoặc chụp nhanh giải nghĩa thích hợp được thu thập.
Nếu một trong hai mục đăng ký đặc biệt
CURRENT
EXPLAIN MODE hoặc
CURRENT EXPLAIN
SNAPSHOT được thiết lập là
REOPT
thì tiện ích giải nghĩa được kích hoạt và thông tin giải nghĩa hoặc dữ
liệu chụp nhanh giải nghĩa (hoặc cả hai nếu cả hai mục đăng ký đặc
biệt được thiết lập) sẽ được thu thập bất cứ khi nào một câu lệnh SQL
tĩnh hoặc động được xử lý trong giai đoạn tái tối ưu hóa câu lệnh
trong thời gian thi hành; tức là, khi giá trị hiện tại cho các biến
chủ chứa, các mục đăng ký đặc biệt, hoặc các đánh dấu tham số sử dụng
trong câu lệnh đã sẵn sàng.
### Các tuỳ chọn EXPLAIN và EXPLSNAP khi kết buộc hoặc tiền biên dịch
Cho đến đây, bạn đã xem xét các cách mà thông tin giải nghĩa toàn diện
và dữ liệu chụp nhanh giải nghĩa có thể được thu thập cho các câu lệnh
SQL động. Nhưng thông thường các ứng dụng cơ sở dữ liệu bao gồm các
câu lệnh SQL tĩnh cũng cần phải được phân tích. Vậy làm thế nào bạn có
thể sử dụng các tiện ích giải nghĩa để phân tích các câu lệnh SQL tĩnh
được mã hóa trong một ứng dụng SQL nhúng? Để thu thập các thông tin
giải nghĩa toàn diện và/hoặc các dữ liệu chụp nhanh giải nghĩa cho các
câu lệnh SQL tĩnh và/hoặc động được mã hóa trong một ứng dụng SQL
nhúng, thì bạn dựa vào các tuỳ chọn
EXPLAIN
và
EXPLSNAP khi kết buộc hoặc tiền biên
dịch.
Như bạn có thể hình dung, tuỳ chọn
EXPLAIN
khi kết buộc/tiền biên dịch được sử dụng để kiểm soát việc có thu thập
hay không thu thập các dữ liệu giải nghĩa toàn diện cho các câu lện
SQL tĩnh và/hoặc động được mã hóa trong một ứng dụng SQL nhúng. Tương
tự như vậy, tuỳ chọn
EXPLSNAP khi kết
buộc/tiền biên dịch kiểm soát việc có thu thập hay không thu thập các
dữ liệu chụp nhanh giải nghĩa. Một hoặc cả hai tùy chọn này có thể
được chỉ rõ như là một phần của lệnh
PRECOMPILE được sử dụng để tiền biên dịch tệp mã nguồn có
chứa các câu lệnh SQL nhúng. Nếu sử dụng kết buộc muộn, thì các tùy
chọn này có thể được cung cấp với lệnh
BIND
được sử dụng để kết buộc tệp tin kết buộc của ứng dụng với cơ sở dữ
liệu.
Cả hai tùy chọn
EXPLAIN và tùy chọn
EXPLSNAP có thể được gán giá trị
NO,
YES,
ALL hoặc
REOPT.
Nếu cả hai tùy chọn được gán giá trị
NO (Ví
dụ:
EXPLAIN NO EXPLSNAP NO), thì tiện ích
giải nghĩa bị vô hiệu hóa và ta không thu thập được dữ liệu giải
nghĩa. Mặt khác, nếu một trong hai tùy chọn được gán giá trị
YES, thì tiện ích giải nghĩa được kích hoạt
và thông tin giải nghĩa toàn diện hoặc dữ liệu chụp nhanh giải nghĩa
(hoặc cả hai loại thông tin này nếu cả hai tùy chọn được thiết đặt)
được thu thập cho mỗi câu lệnh SQL tĩnh có trong ứng dụng. Nếu một
trong hai tùy chọn được gán giá trị
ALL,
thì tiện ích giải nghĩa được kích hoạt và và thông tin giải nghĩa toàn
diện hoặc dữ liệu chụp nhanh giải nghĩa (hoặc cả hai loại thông tin
này nếu cả hai tùy chọn được thiết đặt) được thu thập cho mọi câu lệnh
SQL tĩnh
*và mọi câu lệnh SQL động* được tìm thấy, ngay cả khi
các mục đăng ký đặc biệt
CURRENT EXPLAIN
MODE và/hoặc
CURRENT EXPLAIN
SNAPSHOT được gán giá trị
NO.
Nếu một trong hai tùy chọn
EXPLAIN hoặc
EXPLSNAP được gán giá trị
REOPT thì thông tin giải nghĩa hoặc dữ liệu
chụp nhanh giải nghĩa (hoặc cả hai nếu cả hai tùy chọn được chỉ định)
cho mỗi câu lệnh SQL kết buộc thêm dần, tái tối ưu hóa được sẽ được
đưa vào các bảng giải nghĩa trong thời gian chạy thi hành, ngay cả khi
các mục đăng ký đặc biệt
CURRENT EXPLAIN
MODE và/hoặc
CURRENT EXPLAIN
SNAPSHOT được thiết lập ở trạng thái
NO.
### Đánh giá các dữ liệu giải nghĩa
Cho đến giờ bạn đã tập trung vào những cách thức khác nhau để có thể thu thập dữ liệu giải nghĩa toàn diện và dữ liệu chụp nhanh giải nghĩa. Nhưng một khi dữ liệu đã được thu thập, thì làm thế nào ta xem được chúng? Để trả lời câu hỏi này, bạn cần phải xem xét các công cụ của tiện ích giải nghĩa đã được thiết kế riêng để trình bày các thông tin giải nghĩa theo định dạng có ý nghĩa. Những công cụ này bao gồm:
db2expln
db2exfmt
- Visual Explain
**db2expln**
Trước đây bạn đã thấy rằng khi một tệp tin mã nguồn chứa câu lệnh SQL
nhúng được kết buộc tới một cơ sở dữ liệu (hoặc như là một phần của
quá trình tiền biên dịch hoặc trong thời gian kết buộc muộn), trình
tối ưu hoá của DB2 phân tích mỗi câu lệnh SQL tĩnh mà nó bắt gặp và
tạo ra một kế hoạch truy cập tương ứng, kế hoạch này sau đó sẽ được
lưu trong cơ sở dữ liệu ở dạng gói. Dựa vào tên của cơ sở dữ liệu, tên
của gói, ID của người tạo gói và số hiệu của phần (section) trong gói
(nếu số hiệu của phần được chỉ định là
**0** thì tất cả các phần
của gói được xử lý), công cụ
db2expln diễn
giải và mô tả các thông tin về kế hoạch truy cập cho bất cứ gói nào
được lưu trữ trong danh mục hệ thống của một cơ sở dữ liệu. Vì công cụ
db2expln làm việc trực tiếp với một gói
chứ không làm việc với các dữ liệu giải nghĩa toàn diện hoặc dữ liệu
chụp nhanh giải nghĩa nên nó thường được sử dụng để lấy các thông tin
về các kế hoạch truy cập đã được chọn cho các gói mà dữ liệu giải
nghĩa chưa được thu thập. Tuy nhiên, do công cụ
db2expln chỉ có thể truy cập thông tin được lưu trữ trong
một gói, nên nó chỉ có thể mô tả việc triển khai thực hiện các kế
hoạch truy cập cuối cùng đã lựa chọn, nó không thể cung cấp thông tin
về cách một câu lệnh SQL cụ thể được tối ưu hoá như thế nào.
Bằng cách sử dụng các tham số đầu vào bổ sung, công cụ
db2expln cũng có thể được sử dụng để giải
nghĩa câu lệnh SQL động (không chứa các đánh dấu tham số).
**db2exfmt**
Không giống như công cụ
db2expln, công cụ
db2exfmt được thiết kế để làm việc trực
tiếp với dữ liệu giải nghĩa toàn diện hoặc dữ liệu chụp nhanh giải
nghĩa đã được thu thập và lưu trữ trong các bảng giải nghĩa. Dựa vào
tên của cơ sở dữ liệu và các thông tin đủ phân biệt khác, công cụ
db2exfmt truy vấn các bảng giải nghĩa
để lấy thông tin, định dạng các kết quả, và tạo báo cáo dạng văn bản
có thể hiển thị trực tiếp trên thiết bị đầu cuối hoặc được ghi vào một
tệp tin ASCII.
**Giải nghĩa trực quan (Visual Explain)**
Giải nghĩa trực quan (Visual Explain) là một công cụ GUI cung cấp cho các quản trị viên cơ sở dữ liệu và các nhà phát triển ứng dụng khả năng xem trình bày dưới dạng đồ họa của kế hoạch truy cập đã được chọn cho một câu lệnh SQL cụ thể. Ngoài ra, Giải nghĩa trực quan cho phép bạn:
- Xem các số liệu thống kê của cơ sở dữ liệu đã được sử dụng để tối ưu hóa các câu lệnh SQL.
- Xác định có sử dụng hay không sử dụng chỉ mục để truy cập dữ liệu bảng. (Nếu chỉ mục không được sử dụng, Giải nghĩa trực quan có thể giúp bạn xác định cột nào có thể được hưởng lợi từ việc lập chỉ mục.)
- Xem các tác động của việc tinh chỉnh hiệu năng bằng cách cho phép bạn thực hiện các phép so sánh "trước khi tinh chỉnh" và "sau khi tinh chỉnh".
- Lấy thông tin chi tiết về từng hoạt động được thực hiện theo kế hoạch truy cập, bao gồm cả chi phí ước tính của mỗi hoạt động.
Tuy nhiên, Giải nghĩa trực quan chỉ có thể được sử dụng để xem dữ liệu
chụp nhanh giải nghĩa; để xem dữ liệu giải nghĩa đã được thu thập và
được ghi vào các bảng giải nghĩa, ta phải sử dụng công cụ
db2exfmt thay thế cho công cụ Giải nghĩa trực
quan.
Như bạn có thể thấy, các công cụ khác nhau sẵn có để hiển thị thông tin giải nghĩa toàn diện và dữ liệu chụp nhanh giải nghĩa khác nhau rất nhiều, kể cả về độ phức tạp của chúng cũng như các khả năng mà chúng cung cấp. Bảng 5 tổng kết các công cụ khác nhau có sẵn, và nêu bật lên các đặc trưng cá nhân của chúng. Để tận dụng tốt nhất tiện ích giải nghĩa, bạn nên xem xét môi trường của bạn và nhu cầu của bạn khi quyết định sử dụng công cụ nào.
##### Bảng 5. So sánh các công cụ tiện ích giải nghĩa có sẵn
|Các đặc điểm mong muốn||Visual Explain||db2exfmt||db2expln|
|Giao diện người dùng||Dạng đồ thị||Dạng văn bản||Dạng văn bản|
|Phân tích SQL tĩnh "Nhanh và bẩn -Quick and dirty"||Không có||Không có||Có|
|Câu lệnh SQL tĩnh được hỗ trợ||Có||Có||Có|
|Câu lệnh SQL động được hỗ trợ||Có||Có||Có|
|Các ứng dụng CLI được hỗ trợ||Có||Có||Không có|
|Các thông tin chi tiết về trình tối ưu hóa DB2 có sẵn||Có||Có||Không có|
|Thích hợp cho việc phân tích nhiều câu lệnh SQL||Không có||Có||Có|
## Giải nghĩa trực quan - Xem xét kỹ hơn
### Timerons và dịch câu lệnh SQL
**Timerons**
Điều quan trọng nhất mà bạn cần phải hiểu để phân tích thông tin
giải nghĩa là khái niệm
*timeron.* Timeron là một đơn vị đo lường
được sử dụng bởi trình tối ưu hoá của DB2 để tính toán số lượng thời
gian và nguồn tài nguyên mà một truy vấn sẽ dùng để hoàn thành thực
thi. Timeron là một tổ hợp của thời gian, lượng sử dụng CPU, số lần
vào/ra ổ đĩa và một vài yếu tố khác. Do có sự thay đổi của các giá trị
của tham số này, nên số lượng timerons cần thiết để thực thi một truy
vấn là luôn biến động và có thể thay đổi từ lần thi hành này đến lần
thi hành khác.
Timeron cũng là một đơn vị đo lường được phát minh ra; do đó không có một công thức nào có thể được dùng để chuyển dịch số timerons cần thiết để thi hành một truy vấn thành thời lượng tính bằng giây. Trừ điều đó, timerons có thể giúp bạn xác định liệu một tuyến đường thực thi truy vấn có nhanh hơn các tuyến đường khác hay không. (Bạn đừng lo lắng nếu số lượng timerons cần sử dụng để thi hành một truy vấn biến động sai lệch đến mười hoặc hai mươi giữa các lần biên dịch, điều này có thể dễ dàng xảy ra do những thay đổi trong sự hoạt động CPU, hoạt động của ổ đĩa, hoặc trong việc sử dụng cơ sở dữ liệu.)
**Dịch câu lệnh SQL**
Trước khi bất kỳ lệnh SQL nào có thể được thi hành đối với một cơ
sở dữ liệu, thì trước tiên nó phải được chuẩn bị. Trong quá trình
chuẩn bị này câu lệnh SQL được rút gọn thành một câu lệnh đại số mà
trình tối ưu của DB2 sau đó có thể phân tích được. Câu lệnh đại số này
được gọi là mô hình đồ thị truy vấn
*(query graph model)*, và quá
trình tối ưu hóa sẽ làm việc với nó suốt thời gian. Hình 6 cho thấy
các giai đoạn tối ưu hóa và phân tích cú pháp mà một truy vấn SQL phải
trải qua, trước khi nó có thể được thực thi.
##### Hình 6. Quá trình dịch câu lệnh SQL
![ The SQL translation process](sql_translation.gif)
Kết quả đầu ra cuối cùng của quá trình tối ưu hóa là một
*kế hoạch
truy cập*. Kế hoạch truy cập là tuyến đường và các bước mà DB2
sử dụng để thực thi các câu lệnh SQL. Đây chính là thông tin mà tất cả
các công cụ giải nghĩa sẵn có sẽ hiển thị. Thoạt đầu, kế hoạch truy
cập tỏ ra khá phức tạp. Nhưng qua thực tế, bạn sớm phát hiện ra rằng
chúng thực sự rất dễ đọc và phân tích.
### Kích hoạt công cụ Giải nghĩa trực quan
Bất cứ khi nào dữ liệu giải nghĩa toàn diện và/hoặc dữ
liệu chụp nhanh giải nghĩa được thu thập, thì thông tin về cách thức
và thời gian thu thập dữ liệu được ghi lại trong bảng giải nghĩa
EXPLAIN_INSTANCE. Thông tin này có thể xem được bất kỳ lúc nào tại cửa
sổ Lịch sử câu lệnh được giải nghĩa (Explained Statement History). Cửa
sổ Lịch sử câu lệnh được giải nghĩa được kích hoạt bằng cách chọn cơ
sở dữ liệu thích hợp trong Trung tâm điều khiển (Control Center) và
chọn
**Selected > Show Explained Statement History** từ trình
đơn của Trung tâm điều khiển. Hình 7 là hình của cửa sổ Lịch sử câu
lệnh được giải nghĩa khi dữ liệu chụp nhanh giải nghĩa được thu thập
cho một câu lệnh SQL.
##### Hình 7. Cửa sổ Lịch sử câu lệnh được giải nghĩa
![ The Explained Statement History window](exp_stmt_history.jpg)
Một khi cửa sổ Lịch sử câu lệnh được giải nghĩa đã được mở ra, thì công
cụ Giải nghĩa trực quan (Visual Explain) có thể được sử dụng để phân
tích các dữ liệu chụp nhanh giải nghĩa đã thu thập cho bất cứ bản ghi
nào đã hiện ra bằng cách chọn bản ghi đó và chọn
**Statement >
Show Access Plan** từ trình đơn chính của cửa sổ Lịch sử câu
lệnh được giải nghĩa. Hình 8 là hình của cửa sổ Kế hoạch truy cập
(Access Plan) đã được tạo ra bằng cách thức này cho truy vấn sau đây
(truy vấn này đã chạy với cơ sở dữ liệu SAMPLE được cung cấp cùng với
DB2):
SELECT * FROM EMPLOYEE, DEPARTMENT WHERE WORKDEPT=DEPTNO
##### Hình 8. Cửa sổ đồ thị kế hoạch truy cập
![ The Access Plan Graph window](access_plan_graph.jpg)
Dữ liệu chụp nhanh giải nghĩa có thể luân phiên được thu thập cho một
truy vấn mới và kế hoạch truy cập tương ứng có thể được hiển thị bằng
cách chọn
**Statement > Explain Query...** từ trình đơn chính
của cửa sổ Lịch sử câu lệnh được giải nghĩa. Khi các mục của trình đơn
này được chọn, thì cửa sổ Giải nghĩa câu lệnh truy vấn (Explain Query
Statement) sẽ mở ra và sẽ nhắc bạn nhập vào văn bản câu lệnh truy vấn
của bạn. Hình 9 là hình của cửa sổ Giải nghĩa câu lệnh truy vấn sau
khi nó đã được điền một truy vấn đơn giản.
##### Hình 9. Cửa sổ Giải nghĩa câu lệnh truy vấn
![ The Explain Query Statement window](exp_query.jpg)
Có thể nhấn vào mỗi thành phần của kế hoạch truy cập được hiển thị tại cửa sổ đồ thị kế hoạch truy cập (Access Plan Graph) để phát hiện thông tin chi tiết hơn về thành phần đó. Ví dụ: nếu toán tử HSJOIN(3) trong kế hoạch truy cập được hiển thị tại hình 8 được chọn, thì thông tin chi tiết như tại hình 10 có thể được hiển thị tại cửa sổ chi tiết của toán tử.
##### Hình 10. Cửa sổ chi tiết của toán tử
![ The Operator details window](ap_object_details.jpg)
Khi phân tích một kế hoạch truy cập để định vị những điểm tắc nghẽn trong khi thực hiện, bạn nên thử nhấn vào tất cả những kiểu đối tượng khác nhau để quen dần với các thông tin truy vấn mà bạn có sẵn.
### Các thành phần của công cụ Giải thích trực quan
Bạn có thể thấy rằng kết quả đầu
ra được cung cấp tại cửa sổ Kế hoạch truy cập (xem hình 9) bao gồm một
đồ thị phân cấp, biểu diễn nhiều thành phần khác nhau cần thiết để xử
lý kế hoạch truy cập đã được chọn cho truy vấn đã chỉ định. Mỗi thành
phần trong kế hoạch được trình bày dưới dạng một đối tượng đồ họa, gọi
là nút
*(node)*. Có thể tồn tại hai loại nút: **Toán tử**. Nút toán tử được sử dụng để nhận diện hoặc một hành động phải được thực hiện trên dữ liệu, hoặc kết quả đầu ra được tạo ra từ một bảng hoặc từ một chỉ mục. **Operand**. Nút toán hạng được sử dụng để nhận diện một thực thể mà trên đó một hoạt động được thực hiện (ví dụ: một bảng sẽ là toán hạng của một toán tử quét bảng). **Toán hạng **
Thông thường thì các nút toán hạng được sử dụng để nhận diện các bảng, các chỉ mục và hàng đợi của bảng (hàng đợi của bảng được sử dụng khi chế độ song song trong nội bộ phân đoạn được sử dụng), chúng được biểu diễn bằng ký hiệu trong đồ thị phân cấp là các hình chữ nhật (cho bảng), hình thoi (cho chỉ mục), và hình bình hành (cho hàng đợi của bảng). Bạn có thể xem các ví dụ về các toán hạng bảng và chỉ mục tại hình 11.
##### Hình 11. Bảng và các toán tử của chỉ mục
![ Operands](operands.gif)
**Các toán tử **
Mặt khác, các nút toán tử được sử dụng để nhận diện bất cứ điều gì, từ một hoạt động chèn vào một chỉ mục hoặc hành động quét bảng. Các nút toán tử, được biểu diễn bằng ký hiệu trong đồ thị phân cấp là hình oval, cho biết cách dữ liệu được truy cập như thế nào, các bảng được nối (join) với nhau như thế nào và các nhân tố khác chẳng hạn như một hoạt động sắp xếp có được thực hiện hay không. Bảng 6 liệt kê các toán tử phổ biến nhất, có thể xuất hiện trong đồ thị phân cấp của kế hoạch truy cập.
##### Bảng 6. Các toán tử thường gặp trong công cụ giải nghĩa trực quan
|Toán tử||Hoạt động được thực hiện|
|CMPEXP||Tính toán các biểu thức (Chỉ cho chế độ gỡ lỗi)|
|DELETE||Xóa hàng từ bảng|
|EISCAN||Quét chỉ mục do người dùng định nghĩa để tạo ra luồng các hàng đã rút gọn|
|FETCH||Tìm nạp các cột từ một bảng bằng cách sử dụng mã định danh một bản ghi cụ thể|
|FILTER||Lọc các dữ liệu bằng cách sử dụng một hoặc nhiểu vị từ đối với dữ liệu|
|GENROW||Tạo một bảng của các hàng|
|GRPBY||Nhóm các hàng theo các giá trị chung của các cột hoặc hàm đã chỉ định và tính giá trị các hàm tập hợp.|
|HSJOIN||Biểu diễn một phép nối dùng băm, trong đó hai hoặc nhiều bảng được băm vào các cột nối.|
|INSERT||Chèn các hàng vào bảng|
|IXAND||Thực hiện phép toán lôgic AND đối với các mã định danh hàng (RIDs) từ hai hoặc nhiều lần quét chỉ mục|
|IXSCAN||Quét một chỉ mục của một bảng với tùy chọn các điều kiện bắt đầu/dừng lại, tạo ra một luồng các hàng theo thứ tự|
|MSJOIN||Biểu diễn một phép nối hòa nhập (merge join), ở đây cả bảng ngoài và bảng trong phải theo trật tự của vị từ phép nối|
|NLJOIN||Biểu diễn phép nối vòng lặp lồng nhau (nested loop join), truy cập bảng trong một lần cho mỗi hàng của bảng ngoài|
|PIPE||Chuyển giao các hàng. (Chỉ cho chế độ sửa lỗi.)|
|RETURN||Biểu diễn sự trả về dữ liệu từ truy vấn đển người sử dụng|
|RIDSCN||Quét một danh sách các mã định danh hàng (RIDs) thu được từ một hoặc nhiều chỉ mục|
|RPD||Một toán tử cho các kế hoạch từ xa. Nó rất giống với toán tử SHIP trong Phiên bản 8 (Toán tử RQUERY trong các phiên bản trước đó), ngoại trừ việc nó không chứa câu lệnh SQL hoặc XQuery|
|SHIP||Lấy ra dữ liệu từ một nguồn cơ sở dữ liệu từ xa. Được sử dụng trong hệ thống liên hiệp (federated system)|
|SORT||Sắp xếp các hàng theo thứ tự của các cột được chỉ định, với tùy chọn loại bỏ các mục trùng lặp|
|TBSCAN||Lấy ra các hàng bằng cách đọc tất cả dữ liệu trực tiếp từ các trang dữ liệu|
|TEMP||Lưu giữ dữ liệu trong một bảng tạm thời để được đọc lại (có thể là nhiều lần)|
|TQUEUE||Chuyển giao dữ liệu bảng giữa các tác tử cơ sở dữ liệu|
|UNION||Nối liền các luồng các hàng từ nhiều bảng|
|UNIQUE||Loại bỏ các hàng với những giá trị trùng lặp trên các cột đâ xác định|
|UPDATE||Cập nhật các hàng trong bảng|
|XISCAN||Quét chỉ mục của bảng XML|
|XSCAN||Dẫn hướng trong các cây con của một nút tài liệu XML|
|XANDOR||Cho phép áp dụng các vị từ dùng phép toán AND và OR đối với nhiều chỉ mục XML|
Bạn có thể xem các ví dụ về một số toán hạng phổ biến tại hình 12. Trong ví dụ này, ba hành động khác nhau đang được thực hiện: Hai bảng đang được thực hiện quét bảng, một chỉ mục đang được quét, và hai bộ dữ liệu đang được nối với nhau bằng cách sử dụng thuật toán hashjoin.
##### Hình 12. Một số toán tử thông thường
![ Operators](operators.gif)
**Bộ nối và toán tử RETURN **
Các mũi tên minh hoạ cách dữ liệu chảy từ một nút đến nút kế tiếp như thế nào, chúng nối tất cả các nút được hiển thị trong đồ thị phân cấp và thường thì một toán tử RETURN kết thúc tuyến đường này. Toán tử RETURN biểu diễn bộ kết quả cuối cùng được tạo ra và chứa các thông tin tóm tắt về truy vấn và những gì đang được trả về từ câu lệnh SQL đã hoàn thành. Giá trị của timeron được hiển thị với đối tượng RETURN biểu diễn tổng số đo độ dài của thời gian, được tính bằng timerons, cần thiết để hoàn thành truy vấn. Bạn có thể xem một ví dụ về toán tử RETURN tại hình 13.
##### Hình 13. Toán tử RETURN
![ RETURN operator](return_operator.gif)
### Các nhân tố ảnh hưởng đến hiệu năng truy vấn
Cách thức mà một môi trường cơ sở dữ liệu được cấu hình và cấp độ tối ưu hóa câu truy vấn đã áp dụng để chuẩn bị một truy vấn có thể có tác động rất lớn lên cách thức mà truy vấn sẽ được chuẩn bị, cũng như cách truy vấn đó sẽ được thực thi như thế nào.
**Các giá trị của tham số cấu hình **
Công cụ giải nghĩa trực quan có thể nhanh chóng tóm tắt tất cả các
tham số có ảnh hưởng đến biên dịch truy vấn và hiển thị chúng tại cửa
sổ tóm tắt. Cửa sổ này được gọi là cửa sổ Các tham số tối ưu hóa
(Optimization Parameters) và nó được gọi ra bằng cách chọn
**Statement > Show Optimization Parameters** từ trình đơn
chính của cửa sổ Đồ thị kế hoạch truy cập (Access Plan Graph). Hình 14
là hình của cửa sổ Các tham số tối ưu hóa khi nó được kích hoạt.
##### Hình 14. Cửa sổ Các tham số tối ưu hóa
![ Optimization Parameters window](optimization_parameters.jpg)
Một số tham số cấu hình được hiển thị trong cửa sổ Các tham số tối ưu hóa bao gồm:
**AVG_APPLS**(trung bình các ứng dụng): Tham số này cho biết số trung bình của các ứng dụng sẽ chạy tương tranh đối với cơ sở dữ liệu. DB2 sử dụng thông tin này để xác định không gian nhớ để sắp xếp và pool đệm sẽ được sử dụng nhiều đến mức nào và lượng không gian nhớ mà truy vấn nhiều khả năng sẽ sử dụng là bao nhiêu. **SORTHEAP**(heap sắp xếp): Heap sắp xếp là lượng không gian nhớ có sẵn trong bộ nhớ để thực hiện việc sắp xếp. Nếu việc sắp xếp đòi hỏi bộ nhớ nhiều hơn heap sắp xếp đang sẵn có, thì một phần của dữ liệu sắp xếp sẽ phải được chuyển tạm ra đĩa, (điều này có thể có tác động rất tiêu cực đến hiệu năng). **LOCKLIST**(danh sách khóa): Tham số cho biết lượng bộ nhớ có sẵn cho DB2 để lưu trữ thông tin về khóa cho mỗi ứng dụng. Nếu khoảng trống của danh sách khóa khá nhỏ, thì DB2 có thể phải leo thang thêm một số khóa để có khoảng trống cho tất cả các khóa đang được các ứng dụng nắm giữ. **MAXLOCKS**(tỷ lệ phần trăm tối đa của danh sách khóa): Tham số này kiểm soát số tỷ lệ phần trăm của tổng số khoảng trống trong danh sách khóa mà một ứng dụng có thể chiếm. Nếu một ứng dụng sử dụng bộ nhớ quá nhiều bởi vì có quá nhiều khóa được mở, thì DB2 sẽ leo thang thêm một số khóa để tạo thêm khoảng trống trong danh sách khóa. **NUM_FREQVALUES**(số lượng các giá trị của tần số): Số lượng các giá trị của tần số được sử dụng bởi tiện ích Runstats DB2 để kiểm soát xem số các giá trị mà DB2 sẽ lưu giữ thường xuyên nhất trong bộ nhớ là bao nhiêu. Thông tin này được trình tối ưu hóa sử dụng để xác định tỷ lệ phần trăm của toàn bộ tập kết quả mà một vị từ trong mệnh đề
WHEREsẽ loại bỏ.
**NUM_QUANTILES**(số lượng quantiles dữ liệu): Số lượng quantiles được sử dụng bởi tiện ích Runstats DB2 để kiểm soát xem bao nhiêu quantiles đang được thu giữ cho dữ liệu cột. Việc tăng số lượng quantiles sẽ cung cấp cho DB2 thêm thông tin về việc phân phối các dữ liệu trong cơ sở dữ liệu. **DBHEAP**(heap của cơ sở dữ liệu): Các heap cơ sở dữ liệu kiểm soát số lượng bộ nhớ có sẵn cho thông tin về đối tượng cơ sở dữ liệu. Các đối tượng này bao gồm các chỉ mục, các bảng, pool đệm và vùng bảng. Trình giám sát sự kiện và thông tin vùng đệm nhật ký cũng được lưu giữ ở đây. **CPUSPEED**(tốc độ của CPU): Tốc độ của CPU của máy tính. Nếu giá trị được thiết lập là -1, thì DB2 sử dụng chương trình đo tốc độ CPU để xác định giá trị thiết đặt thích hợp. **BUFFPAGE và kích thước của pool đệm:**Trình tối ưu hóa sử dụng kích thước của các pool đệm có sẵn trong các dữ liệu tối ưu hóa của nó. Việc tăng hoặc giảm kích thước của pool đệm có thể có một tác động đáng kể đến kế hoạch truy cập. **Mức tối ưu hóa được sử dụng **
Yếu tố quan trọng nhất có thể ảnh hưởng đến cách thức sinh ra một
kế hoạch truy cập cho một truy vấn được tạo ra như thế nào là
*mức
tối ưu hóa* được áp dụng để chuẩn bị kế hoạch truy vấn đó. Các
thông tin này báo cho trình Tối ưu hóa của DB2 cần phải nỗ lực như thế
nào và kỹ thuật nào nên được sử dụng để xác định kế hoạch truy vấn tốt
nhất cần sử dụng để giải quyết các truy vấn. Mức độ tối ưu hóa cao hơn
sẽ buộc trình tối ưu hóa phải sử dụng các thuật toán và phân tích đại
số phức tạp hơn - và kết quả là ta sẽ mất thời gian nhiều hơn để tạo
ra kế hoạch truy cập cuối cùng.
Đã có sẵn bảy lớp tối ưu hóa và mỗi lớp sử dụng một tập hợp con khác nhau của tất cả các quy tắc và các con số thống kê có sẵn. Các lớp tối ưu hóa có sẵn là:
**0**-- Sử dụng lượng tối thiểu các tối ưu hóa **1**-- Sử dụng mức độ tối ưu hóa có thể so sánh với DB2/6000 phiên bản 1, cộng thêm một số tính năng chi phí thấp không có trong phiên bản 1 **2**-- Sử dụng các tính năng tối ưu hóa mức 5, nhưng với một thuật toán nối đơn giản **3**-- Thực hiện một lượng các tối ưu hóa vừa phải; tương tự như các đặc trưng tối ưu hóa truy vấn của DB2 cho MVS/ESA **5**-- Sử dụng một lượng đáng kể các tối ưu hóa, áp dụng các quy tắc Heuristic (Nếu không chỉ định khác đi, thì đây là tối ưu hóa mặc định được sử dụng.) **7**-- Sử dụng một số lượng đáng kể các tối ưu hóa, không áp dụng quy tắc Heuristic **9**-- Sử dụng tất cả các kỹ thuật tối ưu hóa có sẵn
Các hướng dẫn sau đây có thể hữu ích khi bạn quyết định lớp tối ưu hóa tốt nhất mà bạn sẽ sử dụng:
- Sử dụng lớp tối ưu hóa
**0**hay **1**cho các truy vấn yêu cầu tối ưu hóa rất ít và phụ thuộc rất nhiều vào việc tìm kiếm chỉ mục khóa chính hoặc các phép nối rất đơn giản (ví dụ: OLTP rất đơn giản).
- Sử dụng lớp tối ưu hóa
**1**cho các truy vấn đơn giản liên quan đến một số ít các bảng và các phép nối liên quan đến chỉ mục trên các bảng (ví dụ: OLTP).
- Sử dụng lớp tối ưu hóa
**5**cho một khối lượng công việc có liên quan đến các OLTP phức tạp hoặc báo cáo liên quan đến nhiều phép nối phức tạp trên nhiều bảng (ví dụ, hỗn hợp OLTP và báo cáo).
- Sử dụng lớp tối ưu hóa
**9**cho các truy vấn yêu cầu các phân tích quan trọng về thống kê dữ liệu và có thể chạy trọng một thời gian dài (trên một phút) (ví dụ: khai phá dữ liệu rất phức tạp hoặc hỗ trợ quyết định). Trình tối ưu hóa của DB2 sẽ chạy lâu hơn để tạo ra một kế hoạch truy cập, nhưng các cải tiến mà có thể được tìm thấy trong kế hoạch truy cập thường có giá trị hơn thời gian bổ sung thêm cần thiết để tạo ra kế hoạch truy cập đó.
### Các ý kiến cuối cùng về xử lý sự cố SQL
Trọn vẹn nhiều cuốn sách đã được viết về cách cải thiện hiệu năng SQL, nên ta không thể đề cập đến tất cả mọi thứ liên quan đến việc tinh chỉnh hiệu năng truy vấn ở bài hướng dẫn này. Tuy nhiên, có một vài điểm then chốt mà bạn nên ghi nhớ khi bạn bắt đầu sử dụng công cụ giải nghĩa trực quan để gỡ lỗi các truy vấn hoạt động kém:
**Không sử dụng các chỉ mục.** Đây có phải là các truy vấn đang sử
dụng các chỉ mục mà bạn mong đợi? Bạn phải đảm bảo rằng việc quét bảng
không xảy ra trên các bảng mà bạn nghĩ đã có các chỉ mục trên chúng.
Câu hỏi này có thể dễ dàng được trả lời bằng cách nhìn vào biểu đồ kế
hoạch truy cập cho truy vấn. Nếu các chỉ mục thực sự tồn tại, thì hãy
kiểm tra số lượng hay thứ tự của các khóa chỉ mục. Nó có thể không
phải là cái mà bạn mong đợi. **Kích cỡ của bảng và việc sử dụng toán tử 'SELECT *'.** Đôi khi trình tối ưu hóa của DB2 sẽ
quyết định rằng sẽ nhanh hơn nếu quét toàn bộ một bảng do số lượng các
cột mà bạn lấy lại. Có lẽ bảng đó khá nhỏ, hoặc có lẽ không hiệu quả
nếu quét một chỉ mục và sau đó trả về một số lượng lớn các hàng, các
hàng này trả lại tất cả các cột của một bảng. Hãy cố gắng trả về chỉ
những cột mà bạn thực sự cần. Bạn hãy xem cột nào được trả lại trong
mỗi phần của truy vấn để xem bạn có thực sự cần chúng không và để xem
đây có phải là lý do để việc quét bảng xảy ra. Ngoài ra, hãy xem xét
việc bao hàm thêm các cột vào trong một chỉ mục. **Thiết lập mức độ tối ưu hóa quá thấp.** Nhiều quản trị viên cơ sở
dữ liệu hạ thấp mức tối ưu hóa xuống 1 để giảm bớt lượng thời gian cần
thiết để chuẩn bị truy vấn. Đôi khi, nâng mức tối ưu hóa lên 5 sẽ cho
phép trình tối ưu hóa tìm một kế hoạch truy cập tốt hơn mà không phải
tạo ra một chỉ mục mới để cải thiện hiệu năng. Giá trị này có thể dễ
dàng được điều chỉnh trong công cụ Giải nghĩa trực quan khi bạn chọn
để tạo ra thông tin giải nghĩa cho một truy vấn bằng cách sử dụng cửa
sổ Giải nghĩa câu lệnh truy vấn (xem hình 9). Giá trị này dũng có thể
được thiết đặt từ CLP bằng cách thi hành lệnh sau:
SET CURRENT QUERY OPTIMIZATION [0|1|2|3|5|7|9]
## Các công cụ khác để xác định vấn đề
### Tiện ích db2mtrk
Bạn đã thấy các công cụ có thể được sử dụng để xem xét tình trạng của
cơ sở dữ liệu tại một thời điểm cụ thể (trình giám sát chụp nhanh),
thu thập dữ liệu bất cứ khi nào một sự kiện cụ thể hoặc giao dịch xảy
ra (các trình giám sát sự kiện), xem xét kế hoạch truy cập dữ liệu
được tạo ra để trả lời các truy vấn (giải nghĩa). Có hai công cụ mà
bạn cần phải biết nếu bạn đang cố gắng xác định vấn đề trong môi
trường cơ sở dữ liệu của mình. Công cụ đầu tiên trong số này được gọi
là tiện ích
db2mtrk.
Tiện ích
db2mtrk được thiết kế để cung cấp
một báo cáo đầy đủ về tình trạng bộ nhớ dành cho các cá thể (trình
quản lý cơ sở dữ liệu), các cơ sở dữ liệu và các tác tử. Khi được thực
hiện, lệnh
db2mtrk tạo ra các thông tin sau
về việc cấp phát pool bộ nhớ:
- Kích thước hiện tại
- Kích thước tối đa (giới hạn cứng)
- Kích thước lớn nhất (high water mark)
- Loại pool (mã định danh biểu thị chức năng mà pool bộ nhớ sẽ phục vụ)
- Tác tử đã cấp phát pool (nếu pool bộ nhớ là riêng tư)
Tiện ích
db2mtrk được gọi ra bằng cách thi
hành lệnh
db2mtrk. Cú pháp cơ bản cho lệnh
này là:
db2mtrk <-i> <-d> <-p> <-m | -w> <-r [
Interval] <[ Count]> > <-v> <-h>
ở đây
*Interval* là số giây phải chờ giữa hai lần liên tiếp nhau
gọi trình theo vết bộ nhớ của DB2 và *Count* là số lần lặp lại
việc gọi trình theo vết bộ nhớ.
Cách thức mà tiện ích
db2mtrk thu thập và
trình bày các thông tin được xác định bởi các tùy chọn được chỉ rõ khi
gọi lệnh
db2mtrk. Bảng 7 liệt kê tất cả các
tùy chọn có sẵn và mô tả các hành vi của mỗi tùy chọn.
##### Bảng 7. Các tùy chọn có sẵn của lệnh db2mtrk
|Tùy chọn||Ý nghĩa|
|-i||Hiển thị bộ nhớ ở mức cá thể|
|-d||Hiển thị bộ nhớ ở mức cơ sở dữ liệu|
|-p||Hiển thị bộ nhớ riêng tư|
|-m||Hiển thị giá trị cực đại của từng pool bộ nhớ|
|-w||Hiển thị giá trị ngấn nước cao của pool bộ nhớ|
|-r||Chế độ lặp lại|
|-v||Xuất ra kết quả dài đầy đủ mọi chi tiết|
|-h||Hiển thị thông tin trợ giúp|
Nếu bạn muốn có các thông tin về việc cấp phát pool bộ nhớ ở mức cá
thể, mức cơ sở dữ liệu và mức riêng tư, thì bạn thực hiện lệnh
db2mtrk như sau:
db2mtrk -i -d -p
Và khi lệnh này được thực thi thì bạn có thể thấy một kết quả tương tự với kết quả đầu ra hiển thị bên dưới đây.
##### Ví dụ kết quả đầu ra tạo ra bởi tiện ích db2mtrk
Memory for instance monh other 320.0K 8.1M Memory for database: SAMPLE utilh pckcacheh catcacheh bph (1) bph (S32K) bph (S16K) bph (S8K) 64.0K 128.0K 64.0K 1.2M 704.0K 448.0K 320.0K bph (S4K) shsorth lockh dbh other 256.0K 0 320.0K 4.3M 128.0K Memory for agent 3632 other apph appctlh 64.0K 64.0K 64.0K Memory for agent 3184 other apph appctlh 64.0K 64.0K 64.0K Memory for agent 508 other apph appctlh 448.0K 64.0K 64.0K
### Tiện ích db2pd
Tiện ích
db2pd được thiết kế để lấy ra các
thông tin từ các tập hợp thích hợp của bộ nhớ hệ thống cơ sở dữ liệu
DB2 và tạo ra một báo cáo toàn diện có thể được sử dụng để giám sát
và/hoặc gỡ lỗi cho một hệ thống cơ sở dữ liệu (hoặc bất cứ thành phần
nào của hệ thống cơ sở dữ liệu). Tiện ích
db2pd được gọi ra bằng cách thực hiện lệnh
db2pd. Hình thái đơn giản nhất của lệnh này
là:
db2pd <-inst> <-database [
DatabaseName] ,... | -alldatabases> <-everything> <-full>
ở đây
*DatabaseName* là tên được gán cho một hoặc nhiều cơ sở dữ
liệu mà ta muốn lấy được thông tin về chúng.
Nếu lệnh
db2pd được thi hành với tùy chọn
-everything, thì tiện ích
db2pd sẽ thu thập thông tin về tất cả các
phần tử của tất cả các cơ sở dữ liệu trên tất cả các máy chủ phân đoạn
cơ sở dữ liệu mà là nội bộ với máy chủ. Nếu tùy chọn
-full được sử dụng, thì thông tin được tạo ra
sẽ được mở rộng tới độ dài tối đa của nó. (Nếu tùy chọn này không được
chỉ định, thì thông tin được tạo ra được cắt xén để tiết kiệm chỗ khi
hiển thị.)
Ngoài việc thu thập một lượng lớn các thông tin cho hệ thống cơ sở dữ
liệu, bạn có thể ra lệnh cho tiện ích
db2pd
tập trung vào thu thập thông tin về một khu vực cụ thể bằng cách chỉ
rõ bất kỳ một tùy chọn nào trong các tuỳ chọn lọc sau đây như là một
phần của lệnh
db2pd:
-applications
-fmp
-agents
-transactions
-bufferpools
-logs
-locks
-tablespaces
-dynamic
-static
-fcm
-memsets
-mempools
-memblocks
-dbmcfg
-dbcfg
-catalogcache
-sysplex
-tcbstats
-reorg
-recovery
-reopt
-osinfo
-storagepaths
-pages
Ví dụ: Nếu bạn muốn có các thông tin về các tệp nhật ký giao dịch kết
hợp với cơ sở dữ liệu SAMPLE, thì bạn có thể làm điều này bằng cách
thi hành câu lệnh
db2pd như sau:
db2pd -database SAMPLE -logs
Và khi lệnh này được thực thi thì bạn có thể thấy một kết quả tương tự với kết quả đầu ra hiển thị bên dưới.
##### Ví dụ kết quả đầu ra được tạo ra bởi tiện ích db2pd
Database Partition 0 -- Database SAMPLE -- Active -- Up 0 days 00:43:48 Logs: Current Log Number 0 Pages Written 0 Method 1 Archive Status n/a Method 1 Next Log to Archive n/a Method 1 First Failure n/a Method 2 Archive Status n/a Method 2 Next Log to Archive n/a Method 2 First Failure n/a Address StartLSN State Size Pages Filename 0x04BBD254 0x0000036B0000 0x00000000 1000 1000 S0000000.LOG 0x04BBD2F4 0x000003A98000 0x00000000 1000 1000 S0000001.LOG 0x04BBD394 0x000003E80000 0x00000000 1000 1000 S0000002.LOG
Trong một số trường hợp, khi một trong các tùy chọn lọc được sử dụng,
đến lượt nó tùy chọn lọc này lại có một tập hợp các tùy chọn riêng của
nó. Xin tham khảo mục Các tham khảo về lệnh DB2 để biết cú pháp hoàn
chỉnh cho lệnh
db2pd.
## Tóm tắt
Hướng dẫn này được thiết kế để giới thiệu cho bạn một bộ các công cụ
giám sát có sẵn với DB2 9 và chỉ cho cho bạn từng công cụ được sử dụng
để giám sát hệ thống cơ sở dữ liệu của bạn hoạt động tốt (hoặc kém)
như thế nào. Công tác giám sát cơ sở dữ liệu là một hoạt động sống
còn, khi được thực hiện thường xuyên, sẽ cung cấp thông tin phản hồi
liên tục về tình trạng sức khỏe của một hệ thống cơ sở dữ liệu. Bởi vì
giám sát cơ sở dữ liệu là một phần không thể tách rời của công tác
quản trị cơ sở dữ liệu như vậy, nên DB2 9 được trang bị một tiện ích
giám sát được gọi là trình giám sát hệ thống cơ sở dữ liệu và mặc dù
cái tên "trình giám sát hệ thống cơ sở dữ liệu" làm ta nghĩ đến một
công cụ giám sát duy nhất, nhưng trong thực tế trình giám sát hệ thống
cơ sở dữ liệu bao gồm hai công cụ khác nhau, có thể được sử dụng để
thu giữ và trả lại thông tin giám sát hệ thống: một
*trình giám sát
chụp nhanh * và một hoặc nhiều *trình giám sát sự kiện*.
Trình giám sát chụp nhanh cho phép bạn chụp hình tình trạng của cơ sở dữ liệu tại một thời điểm cụ thể trong khi các trình giám sát sự kiện thu giữ và ghi nhật ký dữ liệu khi các sự kiện cụ thể của cơ sở dữ liệu xảy ra. Điều quan trọng cần lưu ý là do việc giám sát bổ sung thêm các tải công việc xử lý phụ, nên lượng thời gian dành cho việc giám sát một hệ thống nên được hạn chế, và việc giám sát nên luôn luôn được thực hiện với một mục đích cụ thể.
Với DB2 phiên bản 9, dữ liệu giám sát chụp nhanh cũng có thể thu được bằng cách sử dụng một bộ các thường trình SQL để truy cập dữ liệu được lưu giữ trong các khung nhìn quản trị đặc biệt.
Các trình giám sát sự kiện cung cấp cách để thu thập dữ liệu giám sát khi các sự kiện hoặc các hoạt động xảy ra mà ta không thể giám sát được bằng cách sử dụng trình chụp nhanh. Ngoài ra, trong khi trình giám sát chụp nhanh tồn tại như một tiến trình nền sau và bắt đầu thu thập các dữ liệu giám sát một khi một kết nối đến cơ sở dữ liệu được thiết lập, thì các trình giám sát sự kiện phải được tạo ra trước khi chúng có thể được sử dụng.
Bởi vì các trình giám sát sự kiện là các đối tượng cơ sở dữ liệu đặc
biệt, phải được tạo ra trước khi chúng có thể được sử dụng, nên chúng
chỉ có thể thu thập dữ liệu giám sát cho các sự kiện hoặc các bước
chuyển trạng thái diễn ra trong cơ sở dữ liệu mà chúng đã được định
nghĩa cho cơ sở dữ liệu ấy. Trình giám sát sự kiện không thể được sử
dụng để thu thập dữ liệu giám sát ở mức cá thể. Bạn có thể tạo các
trình giám sát sự kiện một cách trực tiếp từ Trung tâm điều khiển
(chọn mục Create Event Monitor từ trình đơn Event Monitors) hoặc bằng
cách thực hiện câu lệnh SQL
CREATE EVENT
MONITOR.
Trình giám sát sức khỏe bổ sung thêm khả năng quản lý theo ngoại lệ cho
DB2 9 bằng cách báo hiệu cho các quản trị viên hệ thống các vấn đề
tiềm tàng về tình trạng sức khỏe của hệ thống
*trước khi* chúng
trở thành các vấn đề thực sự, ảnh hưởng đến hiệu năng của hệ thống.
Trình giám sát tình trạng sức khỏe hệ thống sử dụng các chỉ báo sức
khỏe hệ thống để đánh giá một số khía cạnh cụ thể về hiệu năng của cá
thể và của cơ sở dữ liệu. Mỗi chỉ báo tình trạng sức khỏe ấy hoạt động
như một thước đo chính xác mà trình giám sát tình trạng sức khỏe kiểm
tra liên tục để đo đạc tình trạng sức khỏe của một khía cạnh cụ thể
của một lớp cụ thể các đối tượng cơ sở dữ liệu. Đến lượt chúng, các
chỉ báo tình trạng sức khỏe đo lường một tập hữu hạn của các trạng
thái của đối tượng phân biệt hoặc một dải liên tục các giá trị để xác
định liệu một đối tượng cụ thể là "khỏe mạnh" hay "không khoẻ mạnh".
Các chỉ báo tình trạng sức khỏe hệ thông có một tập hợp các giá trị
ngưỡng định sẵn, và trình giám sát tình trạng sức khỏe thường xuyên so
sánh các tình trạng của hệ thống với các ngưỡng đó - nếu nó thấy rằng
một ngưỡng giới hạn cụ thể bị vượt quá hoặc phát hiện tình trạng bất
thường của một đối tượng cụ thể, nó sẽ tự động cảnh báo thông qua các
kênh báo cáo đã định.
Tiện ích giải nghĩa cho phép bạn thu giữ và xem các thông tin chi tiết về kế hoạch truy cập được chọn cho một lệnh SQL cụ thể, cũng như thông tin hiệu năng có thể được sử dụng để giúp xác định các câu lệnh viết kém hoặc các yếu kém trong việc thiết kế cơ sở dữ liệu. Cụ thể là các dữ liệu giải nghĩa sẽ giúp bạn hiểu cách mà trình quản lý cơ sở dữ liệu của DB2 truy cập các bảng và các chỉ mục để thỏa mãn một truy vấn. Dữ liệu giải nghĩa cũng có thể được sử dụng để đánh giá bất kỳ hành động tinh chỉnh hiệu năng nào. Trước khi các thông tin giải nghĩa có thể được thu thập, thì một tập hợp đặc biệt các bảng giải nghĩa phải được tạo ra.
Giải nghĩa trực quan (Visual Explain) là một công cụ GUI, cung cấp cho các quản trị viên cơ sở dữ liệu và các nhà phát triển ứng dụng khả năng xem các trình bày dưới dạng đồ họa của kế hoạch truy cập đã được chọn cho một câu lệnh SQL cụ thể.
Tuy nhiên, công cụ Giải nghĩa trực quan chỉ có thể được sử dụng để xem
dữ liệu chụp nhanh giải nghĩa; để xem dữ liệu giải nghĩa đã được thu
thập và được ghi vào các bảng giải nghĩa, bạn phải sử dụng công cụ
db2exfmt thay vào đó.
Tiện ích
db2mtrk được thiết kế để cung cấp
một báo cáo đầy đủ về tình trạng bộ nhớ dành cho các cá thể, các cơ sở
dữ liệu và các tác tử (agents).
Tiện ích
db2pd được thiết kế để lấy ra thông
tin từ các tập hợp bộ nhớ hệ thống cơ sở dữ liệu DB2 thích hợp và tạo
ra một báo cáo toàn diện có thể được sử dụng để giám sát và/hoặc gỡ
lỗi cho hệ thống cơ sở dữ liệu (hoặc bất cứ thành phần nào của hệ
thống cơ sở dữ liệu). Tiện ích
db2pd được
gọi ra bằng cách thực hiện câu lệnh
db2pd.
## Tài nguyên
### Học tập
[Thông tin tổng quan về DB2 9](http://www-306.ibm.com/software/data/db2/v9/pr.html). Tìm thông tin về máy chủ dữ liệu mới, có bao gồm công nghệ pureXML® đã được cấp bằng sáng chế.
- Xem các phần khác của loạt bài
[hướng dẫn chuẩn bị cho kỳ thi 731 lấy chứng chỉ quản trị viên cơ sở dữ liệu DB2 9.](http://www.ibm.com/developerworks/vn/views/data/libraryview.jsp ?search_by=Chuẩn+bị+cho+kỳ+thi+731+lấy+chứng+chỉ+DBA)
- Bạn có thể tìm hiểu thêm về việc giám sát
DB2 từ
[Trung tâm Thông tin của DB2 9](http://publib.boulder.ibm.com/infocenter/db2luw/v9/)
- Để biết thêm thông tin về Chứng chỉ quản
trị cơ sở dữ liệu DB 2 9 cho Linux, UNIX và Windows (kỳ thi 731), hãy truy
cập các liên kết sau:
[Thông tin về đào tạo Quản lý thông tin](http://www-4.ibm.com/software/data/db2/skills/) [Thông tin chung về các chứng chỉ](http://www-306.ibm.com/software/data/education/cert.html)-- gồm các gợi ý về các cuốn sách cần đọc, mục tiêu của kỳ thi và các khóa học.
### Lấy sản phẩm và công nghệ
[Phiên bản dùng thử của DB2 9](http://www.ibm.com/developerworks/downloads/im/udb/?S_TACT=105AGY75)đã có sẵn để tải về miễn phí.
- Tải về
[DB2 Express-C](http://www.ibm.com/developerworks/downloads/im/udbexp/index.html?S_TACT=105AGY75), phiên bản miễn phí của DB2 Express Edition cho cộng đồng, phiên bản này cung cấp cùng các tính năng dữ liệu cốt lõi 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.
## 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-Type: text/html; charset=UTF-8

Content-Language: en-US