ĐĂNG KÝ ĐỂ NHẬN THÔNG TIN MỚI NHẤT

Làm Thế Nào Chúng Ta Biết Được Trong Cơ Sở Dữ Liệu Đang Có Các Câu Lệnh Nào, Các Table Nào Đang Bị Quét Full, Gây Ảnh Hưởng Đến Hiệu Năng

Làm Thế Nào Chúng Ta Biết Được Trong Cơ Sở Dữ Liệu Đang Có Các Câu Lệnh Nào, Các Table Nào Đang Bị Quét Full, Gây Ảnh Hưởng Đến Hiệu Năng?

 

Cách tiếp cận vấn đề: Bản thân các Cơ sở dữ liệu đề sẽ lưu lại thông tin chiến lược thực thi của các câu lệnh. Chúng ta chỉ cần kiểm tra các thông tin này và lọc ra các câu lệnh đang có chiến lược thực thi là quét full table scan (hoặc thuật ngữ tương tự, tùy theo database), thông thường các table bị quét full lớn hơn 1GB đều nên cân nhắc rà soát lại.

Quy trình dưới đây áp dụng cho Cơ sở dữ liệu Oracle

 

1. Scripts chi tiết tìm ra các câu lệnh và objects bị quét full, với điều kiện objecst này có dung lượng lớn hơn 1 GB, trong khoảng thời gian SYSDATE – 13 đến SYSDATE – 1

  SELECT p.sql_id,
         p.object_owner,
         p.object_name,
         p.object_type,
         p.operation,
         p.options,
         o.bytes / 1024 / 1024 / 1024     AS "SIZE_GB",
         COUNT (*)                        AS "EXECUTIONS"
    FROM dba_hist_sql_plan p,
         dba_hist_sqlstat s,
         dba_hist_snapshot sn,
         dba_segments     o
   WHERE     p.object_owner <> 'SYS'
         AND p.object_owner = o.owner
         AND p.object_name = o.segment_name
         AND p.operation LIKE '%TABLE ACCESS%'
         AND p.options LIKE '%FULL%'
         AND p.sql_id = s.sql_id
         AND s.snap_id = sn.snap_id
         AND sn.begin_interval_time > SYSDATE - 13
         AND sn.begin_interval_time < SYSDATE - 1
         AND o.bytes > 1024 * 1024 * 1024
GROUP BY p.sql_id,
         p.object_owner,
         p.object_name,
         p.object_type,
         p.operation,
         p.options,
         o.bytes / 1024 / 1024 / 1024
ORDER BY "EXECUTIONS" DESC, "SIZE_GB" DESC

 

Ghi chú:

  • Trong câu lệnh trên: chúng ta tìm kiếm các câu lệnh đang quét Full các Objects có dung lượng lớn hơn 1GB (điều kiện lọc là o.bytes > 1024 * 1024 * 1024) 
  • Lọc các câu lệnh trong khoảng thời gian SYSDATE -1 đến SYSDATE – 13
  • Các học viên có thể tự thay đổi lại điều kiện để phù hợp với hệ thống của mình.

 

Kết quả sẽ có dạng như sau:

 

SQL_ID OBJECT_OWNER OBJECT_NAME OBJECT_TYPE OPERATION OPTIONS SIZE_GB EXECUTIONS
6p31zn7rwv713 WEB MARK TABLE TABLE ACCESS FULL 1.323242 16
f7n08q7vpannh WEB MARK TABLE TABLE ACCESS FULL 1.323242 15
1p24bhnps74h5 UAT STBALO TABLE TABLE ACCESS FULL 4.0625 1
3dbcspz6735g9 UAT TEST_CT10 TABLE TABLE ACCESS FULL 2.192383 1
6zpdfx1kxhdkh UAT LOGHIST_BK TABLE TABLE ACCESS FULL 1.375 1
f21cctnsubnrj UAT STHIST TABLE TABLE ACCESS FULL 1.25 1
15thkautwjun8 UAT IDHIST TABLE TABLE ACCESS FULL 1.0625 1

 

Trong đó

  • SQL_ID: mã của câu lệnh
  • Object_owner: Cho biết Objects bị quét full thuộc quyền sở hữu của user nào
  • Object_name: Tên objects, đây chính là tên bảng bị quét full
  • Object_type: cho biết đây là loại objects gì, trong ví dụ trên là loại Table
  • Options: Full – thể hiện objects đang bị Full Scan.
  • Size_GB: Dung lượng của objects bị quét full. Dung lượng càng lớn thì ảnh hưởng hiệu năng càng nguy hiểm.
  • Executions: Tổng số lần thực hiện câu lệnh

 

2. Khi có SQL_ID, chúng ta có thể tìm chi tiết câu lệnh SQL bằng cách sau

select sql_text from dba_hist_sqltext where sql_id=’6p31zn7rwv713′

Views: 23





    Câu hỏi bảo mật

    Trả lời

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

    Ask ChatGPT
    Set ChatGPT API key
    Find your Secret API key in your ChatGPT User settings and paste it here to connect ChatGPT with your Tutor LMS website.