Chuẩn bị kỳ thi số 731 lấy chứng chỉ DBA (Quản trị cơ sở dữ liệu) DB2 9, Phần 4: Giám sát hoạt động của DB2

Hướng dẫn này giới thiệu cho bạn bộ các công cụ giám sát đã có sẵn cho 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. Đây là bài thứ tư trong loạt bảy bài hướng dẫn mà bạn có thể sử dụng để chuẩn bị kỳ thi lấy Chứng chỉ Quản trị cơ sở dữ liệu DB2 9 cho các hệ điều hành Linux®, UNIX® và Windows™ (Kỳ thi 731).

Roger Sanders, Quản lý cao cấp, IBM

Roger E. Sanders là chủ tịch của Roger Sanders Enterprises Inc. và là một kỹ sư tư vấn cao cấp các hệ thống doanh nghiệp của công ty EMC. Ông đã làm về DB2 cho Linux, UNIX và Windows kể từ khi DB2 được giới thiệu trên các máy tính cá nhân của IBM (như một phần của Ấn bản mở rộng của OS/2 1.3) và vẫn đang làm việc trong ngành lưu trữ suốt hơn một thập kỷ. Ông đã viết nhiều bài báo cho IDUG Solutions Journal - Tập san các giải pháp IDUG và Certification Magazine - Tạp chí về chứng nhận, đã viết các hướng dẫn DB2 và các bài báo cho IBM developerWorks, đã trình bày tại một số hội nghị/các cuộc họp của Nhóm những người dùng DB2 quốc tế (IDUG - International DB2 Users Group) và Nhóm những người dùng DB2 khu vực (RUG - Regional DB2 Users Group), đã giảng dạy nhiều lớp học về Những điều cơ bản của DB2 và quản trị cơ sở dữ liệu DB2 LUW và là tác giả của 21 cuốn sách về DB2 và một cuốn sách về ODBC. Suốt chín năm qua, ông đã là tác giả của mục Distributed DBA - DBA phân tán trong IBM Data Management Magazine (trước đây là DB2 Magazine) và ông đã giúp IBM phát triển 18 kỳ thi chứng chỉ về DB2 cho LUW. Trong các năm 2008-2012, ông đã được công nhận là một Nhà vô địch của IBM (về quản lý dữ liệu); trong năm 2010, ông được công nhận là một Tác giả Đóng góp cho IBM developerWorks; và trong năm 2011, ông được công nhận như là một Tác giả Nhà nghề của IBM developerWorks.


Tác giả chuyên nghiệp của
        developerWorks

18 12 2009

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 SNAPSHOT hoặ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
Nhóm trình giám sátChuyển mạch giám sátTham số cấu hình của trình quản trị cơ sở dữ liệuCác thông tin được cung cấp
Pools đệmBUFFERPOOLdft_mon_bufferpoolSố 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)LOCKdft_mon_lockSố khóa đã nắm giữ và số lần gặp phải chu kỳ khóa chết
Sắp xếp (Sorts)SORTdft_mon_sortSố 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 STATEMENTdft_mon_stmtThờ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)TABLEdft_mon_tableSố 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)TIMESTAMPdft_mon_timestampThông tin về thời gian và mốc thời gian.
Giao dịch (Transactions)UOWdft_mon_uowThờ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, TIMESTAMPUOW.

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ìnhMô tả
APPLICATIONSN/AKhung 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_PERFORMANCEN/AKhung 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_HITRATION/AKhung 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_ION/AKhung nhìn quản trị này chứa thông tin về thực hiện đọc pool đệm
BP_WRITE_ION/AKhung nhìn quản trị này chứa thông tin về thực hiện viết vào pool đệm
CONTAINER_UTILIZATIONN/AKhung 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_HELDN/AKhung nhìn quản trị này chứa thông tin về các khóa đang được nắm giữ
LOCKWAITSN/AKhung nhìn quản trị này chứa thông tin về các khóa đang đợi được cấp
LOG_UTILIZATIONN/AKhung 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_SQLN/AKhung 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_COSTN/AKhung 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/ASNAP_WRITE_FILEThủ 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.
SNAPAGENTSNAP_GET_AGENTKhung 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_POOLSNAP_GET_AGENT_MEMORY_POOLKhung 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ử
SNAPAPPLSNAP_GET_APPLKhung 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_INFOSNAP_GET_APPL_INFOKhung 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
SNAPBPSNAP_GET_BPKhung 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_PARTSNAP_GET_BP_PARTKhung 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.
SNAPCONTAINERSNAP_GET_CONTAINER_V91Khung 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
SNAPDBSNAP_GET_DB_V91Khung 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_POOLSNAP_GET_DB_MEMORY_POOLKhung 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)
SNAPDBMSNAP_GET_DMBKhung 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_POOLSNAP_GET_DBM_MEMORY_POOLKhung 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
SNAPDETAILLOGSNAP_GET_DETAILLOG_V91Khung 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_SQLSNAP_GET_DYN_SQL_V91Khung 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.
SNAPFCMSNAP_GET_FCMKhung 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_PARTSNAP_GET_FCM_PARTKhung 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.
SNAPHADRSNAP_GET_HADRKhung 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
SNAPLOCKSNAP_GET_LOCKKhung 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
SNAPLOCKWAITSNAP_GET_LOCKWAITKhung 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
SNAPSTMTSNAP_GET_STMTKhung 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_PATHSSNAP_GET_STORAGE_PATHSKhung 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
SNAPSUBSECTIONSNAP_GET_SUBSECTIONThe administrative view and table function returns information about application subsections, namely the subsection logical monitor grouping.
SNAPSWITCHESSNAP_GET_SWITCHESKhung 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
SNAPTABSNAP_GET_TAB_V91Khung 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_REORGSNAP_GET_TAB_REORGKhung nhìn quản trị và hàm bảng trả về thông tin về tổ chức lại bảng.
SNAPTBSPSNAP_GET_TBSP_V91Khung 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_PARTSNAP_GET_TBSP_PART_V91Khung 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_QUIESCERSNAP_GET_TBSP_QUIESCERKhung 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_RANGESNAP_GET_TBSP_RANGEKhung 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
SNAPUTILSNAP_GET_UTILKhung 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_PROGRESSSNAP_GET_UTIL_PROGRESSKhung 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_UTILIZATIONN/AKhung 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_SQLN/AKhung 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ệnDữ liệu thu thập đượcKhi nào thì dữ liệu được thu thậpTên nhóm (Bảng đích) kết hợp
DATABASEGiá trị của tất cả các bộ đếm ở mức cơ sở dữ liệuKhi 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ốiDB, CONTROL
BUFFERPOOLSGiá 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
TABLESPACESGiá 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ốiTABLESPACE, CONTROL
TABLESSố hàng đã đọc và số hàng đã viết vào cho mỗi bảngKhi 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ốiTABLE, CONTROL
DEADLOCKSThô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ệnCONNHEADER, DEADLOCK, DLCONN, DLLOCK, CONTROL
CONNECTIONSGiá trị của tất cả các bộ đếm ở mức ứng dụngKhi một ứng dụng đã kết nối tới cơ sở dữ liệu chấm dứt kết nốiCONNHEADER, CONN, CONTROL
STATEMENTSThờ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
TRANSACTIONSThờ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:

  1. 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ớ.
  2. 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.
  3. 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

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

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

Để 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

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

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ảngNội dung
EXPLAIN_ARGUMENTChứ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_INSTANCEChứ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_OBJECTChứ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_OPERATORChứ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_PREDICATEChứ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_STATEMENTChứ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_STREAMChứ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 EXPLAIN với lệnh PRECOMPILE hoặc BIND
  • Sử dụng tùy chọn kết buộc EXPLSNAP với lệnh PRECOMPILE hoặ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 MODECURRENT 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 MODECURRENT 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 EXPLAINEXPLSNAP 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ốnVisual Explaindb2exfmtdb2expln
Giao diện người dùngDạng đồ thịDạng văn bảnDạ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âu lệnh SQL tĩnh được hỗ trợ
Câu lệnh SQL động được hỗ trợ
Các ứng dụng CLI được hỗ trợ Không có
Các thông tin chi tiết về trình tối ưu hóa DB2 có sẵn Không có
Thích hợp cho việc phân tích nhiều câu lệnh SQLKhông 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

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

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

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

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

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

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
CMPEXPTính toán các biểu thức (Chỉ cho chế độ gỡ lỗi)
DELETEXóa hàng từ bảng
EISCANQué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
FETCHTì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ể
FILTERLọ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
GENROWTạo một bảng của các hàng
GRPBYNhó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.
HSJOINBiể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.
INSERTChèn các hàng vào bảng
IXANDThự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
IXSCANQué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ự
MSJOINBiể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
NLJOINBiể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
PIPEChuyển giao các hàng. (Chỉ cho chế độ sửa lỗi.)
RETURNBiểu diễn sự trả về dữ liệu từ truy vấn đển người sử dụng
RIDSCNQué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
RPDMộ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
SHIPLấ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)
SORTSắ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
TBSCANLấ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
TEMPLư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)
TQUEUEChuyển giao dữ liệu bảng giữa các tác tử cơ sở dữ liệu
UNIONNối liền các luồng các hàng từ nhiều bảng
UNIQUELoạ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
UPDATECập nhật các hàng trong bảng
XISCANQuét chỉ mục của bảng XML
XSCANDẫn hướng trong các cây con của một nút tài liệu XML
XANDORCho 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

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

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

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 đề WHERE sẽ 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
-iHiển thị bộ nhớ ở mức cá thể
-dHiển thị bộ nhớ ở mức cơ sở dữ liệu
-pHiển thị bộ nhớ riêng tư
-mHiển thị giá trị cực đại của từng pool bộ nhớ
-wHiển thị giá trị ngấn nước cao của pool bộ nhớ
-rChế độ lặp lại
-vXuất ra kết quả dài đầy đủ mọi chi tiết
-hHiể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

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

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Information Management
ArticleID=457880
ArticleTitle=Chuẩn bị kỳ thi số 731 lấy chứng chỉ DBA (Quản trị cơ sở dữ liệu) DB2 9, Phần 4: Giám sát hoạt động của DB2
publish-date=12182009