oracle 12.1.0.2中對象鎖對系統的較大影響

来源:https://www.cnblogs.com/lzfhope/archive/2017/12/29/8119351.html
-Advertisement-
Play Games

環境:oracle 12.1.0.2 rac ,4節點 一、概述 通常來說,如果是oltp應用,那麼部署在rac上,是不錯的註意。 但實現情況中,往往是混合類型,既有OLTP也有OLAP。 如果沒有很好地進行資源管理和系統設計,那麼系統的性能往往不如人意。 造成系統慢的原因很多,其中一個就是orac ...


環境:oracle 12.1.0.2  rac ,4節點

一、概述

通常來說,如果是oltp應用,那麼部署在rac上,是不錯的註意。

但實現情況中,往往是混合類型,既有OLTP也有OLAP。

如果沒有很好地進行資源管理和系統設計,那麼系統的性能往往不如人意。

造成系統慢的原因很多,其中一個就是oracle rac特有結構的負面作用。

--

例如如果一個過程或者包正在執行,且是一個長會話,需要很久才會釋放,這個時候企圖編譯包,造成的一個大問題就是系統變慢,登錄變慢。

這是因為,編譯會話企圖獲得執行包的排它鎖,所以它需要不停地輪詢各個實例,看這個對象是否被鎖,結果毫無疑問,是被鎖住,過了一會又會去查詢。

而我們知道,在多個實例之間查詢對象的鎖狀態還是比較費時的,尤其是系統中有巨量鎖的情況下,這個會耗費許多的CPU。

最終就是系統變慢。

二、方法

那麼是否有可以解決的辦法了?

oracle本身並不提供這樣的工具,但作為dba只能取監測這樣的監測過程。

那麼應該監視什麼字典表呢?

監視v$db_cache_object

關鍵的問題是,這個視圖不知道是哪個會話,所以即使知道了,也難於執行kill session的操作。

監視dba_ddl_locks

註:在這個視圖中,不表明這個對象無法被編譯,除非是排它的鎖。

dba_ddl_lock$的定義

create or replace view sys.dba_ddl_locks as
select  s.sid session_id,
          substr(ob.kglnaown,1,30) owner,
          substr(ob.kglnaobj,1,30) name,
    decode(ob.kglhdnsp, 0, 'Cursor', 1, 'Table/Procedure/Type', 2, 'Body',
           3, 'Trigger', 4, 'Index', 5, 'Cluster', 13, 'Java Source',
             14, 'Java Resource', 32, 'Java Data', to_char(ob.kglhdnsp)) type,
    decode(lk.kgllkmod, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive',
       'Unknown') mode_held,
    decode(lk.kgllkreq,  0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive',
       'Unknown') mode_requested
   from v$session s, x$kglob ob, x$kgllk lk
   where lk.kgllkhdl = ob.kglhdadr
   and   lk.kgllkuse = s.saddr
   and   ob.kglhdnsp != 0;

其中

x$kgllk ---[K]ernel [G]eneric [L]ibrary Cache Manager object [L]oc[K]s   --核心庫緩存管理對象鎖

x$kglob---[K]ernel [G]eneric [L]ibrary Cache Manager [OB]ject                --核心庫緩存管理對象

前者是後者的明細,雙方通過

--關於x$kgllk的定義
http://blog.itpub.net/69265/viewspace-442931/

 

SQL> desc x$kgllk;
名稱 類型
---------- -----------
ADDR            RAW(4)
INDX             NUMBER
INST_ID        NUMBER
KGLLKADR   RAW(4)  --
KGLLKUSE   RAW(4)  ---會話地址(對應v$session的saddr)
KGLLKSES   RAW(4)  ---owner地址
KGLLKSNM   NUMBER ---SID
KGLLKHDL   RAW(4) ---library cache object 句柄
KGLLKPNC   RAW(4) ---the address of the call pin
KGLLKPNS   RAW(4) ---對應跟蹤文件中的session pin值
KGLLKCNT   NUMBER
KGLLKMOD   NUMBER ---持有鎖的模式(0為no lock/pin held﹐1為null,2為share﹐3為exclusive)
KGLLKREQ   NUMBER ---請求鎖的模式(0為no lock/pin held﹐1為null,2為share﹐3為exclusive)
KGLLKFLG   NUMBER ---cursor的狀態﹐8(10g前)或2048(10g)表示這個sql正在運行﹐
KGLLKSPN   NUMBER ---對應跟蹤文件的savepoint的值
KGLLKHTB   RAW(4)
KGLNAHSH   NUMBER ---sql的hash值(對應v$session的sql_hash_value)
KGLLKSQLID  VARCHAR2(13) ---sql ID,sql標識符
KGLHDPAR   RAW(4) ---sql地址(對應v$session的sql_address)
KGLHDNSP   NUMBER
USER_NAME  VARCHAR2(30) ---會話的用戶名
KGLNAOBJ   VARCHAR2(60) ---對象名稱或者已分析並打開cursor的sql的前60個字元

--關於x$kglob的定義

參考:http://blog.itpub.net/11134237/viewspace-686353/

具體略。

 

在cdb-rac根中監視被鎖定過程和會話

原有的dba_ddl_locks視圖只是適用於單實例,為了方便cdb-rac的監視,必須進行調整。

create or replace view gv_ddl_locks as
select    s.con_id,
          p."PDB_NAME",
          s.inst_id,
          s.sid session_id,
          s.serial#,
          substr(ob.kglnaown,1,128) owner,
          substr(ob.kglnaobj,1,1000) name,
    decode(ob.kglhdnsp, 0, 'Cursor', 1, 'Table/Procedure/Type', 2, 'Body',
           3, 'Trigger', 4, 'Index', 5, 'Cluster', 13, 'Java Source',
             14, 'Java Resource', 32, 'Java Data', to_char(ob.kglhdnsp)) type,
    decode(lk.kgllkmod, 0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive',
     'Unknown') mode_held,lk.kgllkmod,
    decode(lk.kgllkreq,  0, 'None', 1, 'Null', 2, 'Share', 3, 'Exclusive',
     'Unknown') mode_requested
   from  gv$session s, x$kglob ob, x$kgllk lk,cdb_pdbs p,GV$DB_OBJECT_CACHE GCO
   where lk.kgllkhdl = ob.kglhdadr and lk.con_id=ob.con_id and lk.inst_id=ob.inst_id
   and   lk.kgllkuse = s.saddr and lk.con_id=s.con_id and lk.inst_id=s.inst_id
   AND   GCO.INST_ID=OB.INST_ID AND GCO.CON_ID=OB.CON_ID AND GCO.ADDR=OB.KGLHDADR AND GCO.LOCKS<>0
   and   p."CON_ID"=s.con_id
   and   ob.kglhdnsp != 0;

以上語句在cdb$root創建。

這個視圖有幾個局限性:

  1. 由於需要使用動態視圖,所以有些運行時間短的糊化根本無法查詢到
  2. 由於動態視圖的特性,判斷對象是否被鎖定並不是非常適合--尤其是那些運行時間短的
  3. 在大的cdb-rac中執行,會變更比較慢

 

 

三、總結
1.如果僅僅是想簡單地知道什麼對象被鎖住,可以直接查詢:

select * from sys.gv_$db_object_cache x where x.owner='C##LUZHIFEI';

2.如果還想知道是什麼會話,需要執行前文的視圖(以sys執行)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前幾天由於工作上的事耽誤了幾天,特來追加更新 第1章 ansible軟體概念說明 python語言是運維人員必會的語言,而ansible是一個基於Python開發的自動化運維工具 (saltstack)。其功能實現基於SSH遠程連接服務;ansible可以實現批量系統配置、批量軟體部署、批量文件拷貝 ...
  • win10點擊滑鼠右鍵調出菜單時,看不到菜單的文字,只顯示了小圖標這種問題的修複方法。 ...
  • 靜態散列要求桶的數目始終固定,那麼在確定桶數目和選擇散列函數時,如果桶數目過小,隨著數據量增加,性能會降低;如果留一定餘量,又會帶來空間的浪費;或者定期重組散列索引結構,但這是一項開銷大且耗時的工作。為了應對這些問題,為此提出了幾種動態散列(dynamic hashing)技術,可擴展動態散列(ex ...
  • 一.資料庫的基本操作 資料庫的安裝以後更新 在Linux系統下: 1.啟動資料庫服務:sudo service mysql start 2.停止資料庫服務:sudo service mysql stop 3.重啟資料庫服務:sudo service mysql restart 4.進入MySQL數據 ...
  • 操作系統 : CentOS7.3.1611_x64 go語言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 安裝InfluxDB之後,在/usr/bin下會有如下幾個文件: 下麵簡單介紹下各個工具的使用。 influxd使用方法介紹 該可執行文件為InfluxDB伺服器程 ...
  • 一、Inception簡介一款用於MySQL語句的審核的開源工具,不但具備自動化審核功能,同時還具備執行、生成對影響數據的回滾語句功能。 基本架構: 二、Inception安裝 1、軟體下載 下載鏈接:https://github.com/mysql-inception/inception文檔鏈接: ...
  • 摘要: EagleEye作為阿裡集團老牌的鏈路跟蹤系統,其自身業務雖不在交易鏈路上,但卻監控著全集團的鏈路狀態,特別是在中間件的遠程調用上,覆蓋了集團絕大部分的場景,在問題排查和定位上發揮著巨大的作用,保障了各個系統的穩定性,為整個技術團隊打贏這場戰役保駕護航。 背景 雙十一一直是阿裡巴巴集團每年要 ...
  • 概述 本章節介紹Insert、Update、Delete、Drop操作基本語法。 環境: Version:3.4 insert insert()基本語法如下: db.collection.insert( <document or array of documents>, { writeConcern ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...