Thứ Sáu, 27 tháng 12, 2024

Fix lỗi cursor: mutex X và cursor: mutex S

VẤN ĐỀ

Khi check session bằng câu lệnh:

SELECT /*1.ActiveSession*/ distinct s.inst_id i#, s.username, s.SID SID, s.osuser, s.machine,DECODE(S.WAIT_TIME, 0, S.EVENT, 'CPU') ACTION,

s.sql_id, SUBSTR(DECODE(SS.SQL_TEXT, NULL, AA.NAME, SS.SQL_TEXT), 1, 1000) SQLTEXT,s.logon_time,s.p1text, S.P1, s.p2text, S.P2, s.p3text, S.P3

FROM GV$SESSION S, GV$SQLSTATS SS, AUDIT_ACTIONS AA

WHERE  

S.STATUS = 'ACTIVE' AND  

S.SQL_ID = SS.SQL_ID (+) AND AA.ACTION = S.COMMAND and s.type != 'BACKGROUND' AND S.TYPE = 'USER' 

and s.username  NOT in ('SYSMAN','DBSNMP','GGATE','GOLDENGATE')

--AND username in 'SYS'

--and DECODE(S.WAIT_TIME, 0, S.EVENT, 'CPU') like '%cell single block physical read%'

--and lower(ss.sql_text) like lower('%parallel%')

--and s.sid=4588 

--and s.machine like '%BINHTV%'

--and s.sql_id ='ccwg0nqr1zbu7'

ORDER BY username,sql_id;

DBA gặp event "cursor: mutex X" (> 92% Thời gian DB) và một số sự kiện "cursor: mutex S" trong cơ sở dữ liệu (lock > 1000, kill đi lại lên luôn, bình thường lock ~ 0)

Khi check từ AWR gặp event sau: 

'cursor: mutex X' đã tiêu tốn hơn 171.65 ms cho mỗi lần chờ hoặc thời gian chờ trung bình và chiếm hơn 91.8% tổng thời gian DB được tiêu thụ.

Kiểm tra phần 'SQL order by version' và thấy một câu lệnh riêng lẻ có ở đó với 7.201 version hoặc Childs trong khoảng thời gian 2 giờ.

Cũng đã được xác nhận thông qua báo cáo ASH (xem đoạn trích được dán bên dưới). Câu lệnh SELECT cụ thể này đang chờ cả hai sự kiện được phân loại đồng thời này dành riêng cho library cache.

NGUYÊN NHÂN

Nguyên nhân đằng sau sự cố này bằng cách truy vấn V$SQL_SHARED_CURSOR (vì lý do) để biết lý do tại sao một con trỏ con cụ thể không được chia sẻ với các con trỏ con hiện có và tôi nhận được BIND_EQUIV_FAILURE là lý do. Cơ sở dữ liệu đã bật ACS (Adaptive Cursor Sharing) và CFB (Cardinality Feedback) và có vẻ như là sự cố 'cursor leak'.

Tôi cũng nhận thấy thời gian ngủ rất lớn đối với mutex loại CP trên các hàm kkscsAddChildNode & kkscsPruneChild , bên dưới là đoạn trích từ AWR, hãy xem hai đoạn đầu tiên được tô màu đỏ.

Và khi tôi chuẩn bị chiến lược (tức là thanh trừng kế hoạch cụ thể, v.v.) để xử lý tình huống, tôi nghĩ đến việc tạo phân tích hang để xác định xem có bất kỳ chuỗi hang nào đã biết/quen thuộc trong dấu vết ngăn xếp không. Và tôi thấy hầu hết các chuỗi chạy cùng một con trỏ từ các quy trình khác nhau đang chờ 'cursor: mutex X' với ngăn xếp lỗi bên dưới… Ý tôi là có nhiều phiên duy nhất đang chờ một mutex con trỏ cha ở chế độ độc quyền trên cùng một con trỏ bên dưới ngăn xếp sau.

<-kgxExclusive<-kkscsAddChildNode<-kxscod<-kkscsCompareBinds<-kkscscid_bnd_eval<-kkscsCheckCriteria<-kkscsCheckCursor<-kkscsSearchChildList<-kksfbc<-

Vì vậy, chúng tôi đã có một ngăn xếp lỗi hiển thị các chuỗi chờ chạy cùng một con trỏ từ các tiến trình khác nhau đang chờ 'cursor: mutex X' và với BIND_EQUIV_FAILURE=Y trong V$SQL_SHARED_CURSOR và CFB & ACS được bật, có vẻ như điều này xảy ra do một số lỗi.

GIẢI PHÁP

Oracle nhận định hai lỗi chưa được công bố là 28889389 và 28794230. Đối với lỗi đầu tiên, chúng ta cần áp dụng bản vá 28889389, có mã được tối ưu hóa cho mutex con trỏ trong khi tìm kiếm con trỏ cha để khớp, đối với lỗi thứ hai là 28794230, họ đề xuất một số phương án thay thế. được đưa ra bên dưới…

SQL> alter system set "_optimizer_use_feedback"=false;

System altered.

SQL> alter system set "_optimizer_adaptive_cursor_sharing"=false;

System altered.

SQL> alter system set "_optimizer_extended_cursor_sharing_rel"=none;

System altered.

Sau đó tải giảm, lock ~ 0, active session < 10:

SELECT /*1.ActiveSession*/ distinct s.inst_id i#, s.username, s.SID SID, s.osuser, s.machine,DECODE(S.WAIT_TIME, 0, S.EVENT, 'CPU') ACTION,

s.sql_id, SUBSTR(DECODE(SS.SQL_TEXT, NULL, AA.NAME, SS.SQL_TEXT), 1, 1000) SQLTEXT,s.logon_time,s.p1text, S.P1, s.p2text, S.P2, s.p3text, S.P3

FROM GV$SESSION S, GV$SQLSTATS SS, AUDIT_ACTIONS AA

WHERE  

S.STATUS = 'ACTIVE' AND  

S.SQL_ID = SS.SQL_ID (+) AND AA.ACTION = S.COMMAND and s.type != 'BACKGROUND' AND S.TYPE = 'USER' 

and s.username  NOT in ('SYSMAN','DBSNMP','GGATE','GOLDENGATE')

--AND username in 'SYS'

--and DECODE(S.WAIT_TIME, 0, S.EVENT, 'CPU') like '%cell single block physical read%'

--and lower(ss.sql_text) like lower('%parallel%')

--and s.sid=4588 

--and s.machine like '%BINHTV%'

--and s.sql_id ='ccwg0nqr1zbu7'

ORDER BY username,sql_id;

=============================
Website không bao giờ chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn muốn tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ kinh nghiệm, thủ tục, quy trình, bí kíp thực chiến mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin1_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master