【OceanBase診斷調優】—— 租戶資源統計項及其查詢方法

本文主要介紹 OceanBase 數據庫中租戶資源統計項及其查詢方法。

適用版本

OceanBase 數據庫 V4.1.x、V4.2.x 版本。

CPU 資源統計項

  • 邏輯 CPU 使用率(線程處理請求的時間占比)。

    通過虛擬表?__all_virtual_sysstat?在 SYS 系統租戶下,查看租戶的?cpu_usage,表示一段時間內(1s)租戶工作線程的處理請求時間占比和租戶?unit?規格,粗算的邏輯 CPU 使用率,數值代表百分比,例如 400 指的是 400%。

    obclient> SELECT * FROM oceanbase.__all_virtual_sysstat WHERE tenant_id = 1 AND name = 'cpu usage';
    

    輸出結果如下:

    +-----------+--------------+----------+------------+-------+------------+---------+-----------+-------+-------------+
    | tenant_id | svr_ip       | svr_port | statistic# | value | value_type | stat_id | name      | class | can_visible |
    +-----------+--------------+----------+------------+-------+------------+---------+-----------+-------+-------------+
    |         1 | xx.xxx.xx.xx |    57234 |        573 |    10 | SET_VALUE  |  140006 | cpu usage |    64 |           1 |
    +-----------+--------------+----------+------------+-------+------------+---------+-----------+-------+-------------+
    
  • 租戶線程消耗的 CPU 總時間。

    通過虛擬表?__all_virtual_sysstat?在 SYS 系統租戶下,查看租戶的?cpu_time,不管是否開啟?cgroup,都能獲取到 cpu time 的值。區別在于開啟了?cgroup?后,會通過?cgroup?功能從?cpuacct.usage?中獲取 CPU 時間;否則,不開啟?cgroup?。只會通過 /proc/$pid/task/$tid/stat 目錄來讀取 CPU 時間。

    obclient> SELECT * FROM oceanbase.__all_virtual_sysstat WHERE tenant_id = 1 AND name = 'cpu time';
    

    輸出結果如下:

    +-----------+--------------+----------+------------+-------+------------+---------+----------+-------+-------------+
    | tenant_id | svr_ip       | svr_port | statistic# | value | value_type | stat_id | name     | class | can_visible |
    +-----------+--------------+----------+------------+-------+------------+---------+----------+-------+-------------+
    |         1 | xx.xxx.xx.xx |    57234 |        580 |     0 | SET_VALUE  |  140013 | cpu time |    64 |           1 |
    +-----------+--------------+----------+------------+-------+------------+---------+----------+-------+-------------+
    

內存資源統計項

  • mod 內存占用情況。

    通過虛擬表?__all_virtual_memory_info?在 SYS 系統租戶下,查詢租戶的每個?mod_name?的內存占用情況。

    obclient> SELECT * FROM oceanbase.__all_virtual_memory_info WHERE tenant_id = 1 LIMIT 1;
    

    輸出結果如下:

    +-----------+--------------+----------+--------+-----------------+----------------+----------+--------+-----------------+-------+-----------+-----------+-------+
    | tenant_id | svr_ip       | svr_port | ctx_id | label           | ctx_name       | mod_type | mod_id | mod_name        | zone  | hold      | used      | count |
    +-----------+--------------+----------+--------+-----------------+----------------+----------+--------+-----------------+-------+-----------+-----------+-------+
    |         1 | xx.xxx.xx.xx |    57234 |      0 | MysqlRequesReco | DEFAULT_CTX_ID | user     |      0 | MysqlRequesReco | zone1 | 146604032 | 146551808 |    33 |
    +-----------+--------------+----------+--------+-----------------+----------------+----------+--------+-----------------+-------+-----------+-----------+-------+
    

    有關 mod 詳細信息參見:V$OB_MEMORY?。

  • ctx 和 mod 相關的內存信息。

    通過?observer.log?文件中包含 [MEMORY] 標簽的日志,可以查看租戶 ctx 和 mod 相關的內存信息,10 秒一次。

    grep "\[MEMORY\]" observer.log*
    

    輸出結果如下:

    observer.log.20230203145702002:[MEMORY] tenant_id= 1001 ctx_id=           DEFAULT_CTX_ID hold=    374,960,128 used=    337,967,264 limit= 9,223,372,036,854,775,807
    observer.log.20230203145702002:[MEMORY] idle_size=         0 free_size=         0
    observer.log.20230203145702002:[MEMORY] wash_related_chunks=         0 washed_blocks=         0 washed_size=         0
    observer.log.20230203145702002:[MEMORY] hold=    100,143,104 used=    100,086,048 count=      37 avg_used=      2,705,028 block_cnt=      37 chunk_cnt=      37 mod=IoControl
    observer.log.20230203145702002:[MEMORY] hold=     80,019,456 used=     80,000,000 count=       1 avg_used=     80,000,000 block_cnt=       1 chunk_cnt=       1 mod=MysqlRequesReco
    observer.log.20230203145702002:[MEMORY] hold=     41,963,520 used=     41,943,040 count=       1 avg_used=     41,943,040 block_cnt=       1 chunk_cnt=       1 mod=LogGroupBuffer
    observer.log.20230203145702002:[MEMORY] hold=     18,878,080 used=     17,829,440 count=     129 avg_used=        138,212 block_cnt=     129 chunk_cnt=      12 mod=SqlDtl
    observer.log.20230203145702002:[MEMORY] hold=     16,039,936 used=     16,000,000 count=       2 avg_used=      8,000,000 block_cnt=       2 chunk_cnt=       2 mod=SqlPlanManger
    

IO 資源統計項

  • IO 日志信息有以下幾類。

    通過不同的 grep 命令查看。

    • grep "[IO STATUS]" 查看所有租戶不同 group 的實時 iops 值(對應?__all_virtual_io_quota?表),有 IO 流量的情況下每秒打印一次。

    • grep "IO STATUS SENDER" 查看 IO 請求的調度信息,包括所有調度線程中排隊的IO請求數量和下一個請求發出時間(對應?__all_virtual_io_scheduler?表),每秒打印一次。

    • grep "IO STATUS TRACER" 查看 IO 引用計數統計,用以排查內存泄漏問題(前提是開了 io_trace 配置項),如果?req_count?持續上漲那么可能存在有泄漏的問題,可以通過?backtrace?查看調用棧。

      示例。

      y98u0-gy683-778u3-6783j

  • IO 統計信息的表主要是?__all_virtual_io_quota?表,這個表中實時展示了不同 group 的 iops 情況。

    y98u0-gy683-778u3-6783j

  • IO 調度信息的表主要是?__all_virtual_io_scheduler?表這個表中展示了當前 IO 請求排隊和調度信息,包括下一個請求的發送時間。

Session 會話信息統計項

  • 租戶 session 會話信息。

    通過查詢?__all_virtual_session_info?表,在 SYS 系統租戶下,查看租戶 session 會話信息。

    SELECT * FROM oceanbase.__all_virtual_session_info WHERE tenant = 'sys' LIMIT 1;
    

    輸出結果如下:

    +------------+------+--------+--------------------+-----------+---------+----------------------------------+------+--------+---------------------------------------------------------------------+--------------+----------+----------+--------------+---------------+----------------+-----------+----------+-----------+------------+------------------------------------+-----------+-----------+-------------+
    | id         | user | tenant | host               | db        | command | sql_id                           | time | state  | info                                                                | svr_ip       | svr_port | sql_port | proxy_sessid | master_sessid | user_client_ip | user_host | trans_id | thread_id | ssl_cipher | trace_id                           | ref_count | backtrace | trans_state |
    +------------+------+--------+--------------------+-----------+---------+----------------------------------+------+--------+---------------------------------------------------------------------+--------------+----------+----------+--------------+---------------+----------------+-----------+----------+-----------+------------+------------------------------------+-----------+-----------+-------------+
    | 3221487625 | root | sys    | xx.xxx.xx.xx:xxxxx | oceanbase | Query   | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |    0 | ACTIVE | select * from __all_virtual_session_info where tenant='sys' limit 1 | xx.xxx.xx.xx |    57234 |    57235 |         NULL |          NULL | xx.xxx.xx.xx   | %         |        0 |    117243 | NULL       | xxxxxxxxxxxxx-xxxxxxxxxxxxxxxx-x-x |         0 |           |             |
    +------------+------+--------+--------------------+-----------+---------+----------------------------------+------+--------+---------------------------------------------------------------------+--------------+----------+----------+--------------+---------------+----------------+-----------+----------+-----------+------------+------------------------------------+-----------+-----------+-------------+
    
  • 租戶會話統計數據。

    通過查詢?__all_virtual_sesstat?表,在 SYS 系統租戶下,查看租戶會話統計數據。

    SELECT * FROM oceanbase.__all_virtual_sesstat WHERE tenant_id = 1 LIMIT 1;
    

    輸出結果如下:

    +------------+--------------+----------+------------+-----------+-------+-------------+
    | session_id | svr_ip       | svr_port | statistic# | tenant_id | value | can_visible |
    +------------+--------------+----------+------------+-----------+-------+-------------+
    | 3221225472 | xx.xxx.xx.xx |    57234 |          0 |         1 |     1 |           1 |
    +------------+--------------+----------+------------+-----------+-------+-------------+
    
  • 租戶 session 會話等待情況。

    通過查詢?__all_virtual_session_wait?表,在 SYS 系統租戶下,查看租戶 session 會話等待情況。

    SELECT * FROM oceanbase.__all_virtual_session_wait WHERE tenant_id = 1 LIMIT 1;
    

    輸出結果如下:

    +------------+--------------+----------+-----------+----------+--------+-----+--------+-----+--------+----+-------+---------------+-------------+------------+-------------------+-----------------+----------------------+----------------------------+
    | session_id | svr_ip       | svr_port | tenant_id | event    | p1text | p1  | p2text | p2  | p3text | p3 | level | wait_class_id | wait_class# | wait_class | state             | wait_time_micro | time_remaining_micro | time_since_last_wait_micro |
    +------------+--------------+----------+-----------+----------+--------+-----+--------+-----+--------+----+-------+---------------+-------------+------------+-------------------+-----------------+----------------------+----------------------------+
    | 3221225472 | xx.xxx.xx.xx |    57234 |         1 | sync rpc | pcode  | 257 | size   | 286 |        |  0 |     0 |           107 |           7 | NETWORK    | WAITED KNOWN TIME |       103613812 |                 NULL |                 2410634833 |
    +------------+--------------+----------+-----------+----------+--------+-----+--------+-----+--------+----+-------+---------------+-------------+------------+-------------------+-----------------+----------------------+----------------------------+
    
  • 租戶 session 會話等待歷史記錄。

    通過查詢?__all_virtual_session_wait_history?表,在 SYS 系統租戶下,查看租戶 session 會話等待歷史記錄。

    SELECT * FROM oceanbase.__all_virtual_session_wait_history WHERE tenant_id = 1 LIMIT 1;
    

    輸出結果如下:

    +------------+--------------+----------+------+-----------+--------+----------+--------+-----+--------+-----+--------+----+-------+-----------------+----------------------------+------------+
    | session_id | svr_ip       | svr_port | seq# | tenant_id | event# | event    | p1text | p1  | p2text | p2  | p3text | p3 | level | wait_time_micro | time_since_last_wait_micro | wait_time  |
    +------------+--------------+----------+------+-----------+--------+----------+--------+-----+--------+-----+--------+----+-------+-----------------+----------------------------+------------+
    | 3221225472 | xx.xxx.xx.xx |    57234 |    1 |         1 |     20 | sync rpc | pcode  | 257 | size   | 286 |        |  0 |     0 |       103613812 |                 2442809561 | 10361.3812 |
    +------------+--------------+----------+------+-----------+--------+----------+--------+-----+--------+-----+--------+----+-------+-----------------+----------------------------+------------+

附錄:

OceanBase?敏捷診斷工具(OceanBase?Diagnostic Tool,?簡稱obdiag)?是一款源代碼開源敏捷黑屏診斷工具,可以對OceanBase集群進行一鍵集群巡檢、一鍵分析、一鍵根因分析以及一鍵診斷信息收集。

obdiag 下載地址:https://www.oceanbase.com/softwarecenter

obdiag 官方文檔:https://www.oceanbase.com/docs/obdiag-cn

obdiag github地址:https://github.com/oceanbase/obdiag

obdiag?SIG 文檔:https://oceanbase.yuque.com/org-wiki-obtech-vh7w9r/imzr6c

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11084.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11084.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11084.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AtCoder Beginner Contest 308 A題 New Scheme

A題:New Scheme 標簽:模擬 題意:給定 8 8 8個數的序列,詢問這些數是否滿足以下條件: 在 100 100 100到 675 675 675之間且能被 25 25 25整除序列是單調非遞減的 題解:按題意模擬判斷就好了。 代碼&#…

09.zabbix自定義模塊并使用

zabbix自定義模塊并使用 根據tcp的11中狀態獲取值,進行批量配置監控項 [rootyunlong66 ~]# cat /etc/zabbix/zabbix_agentd.d/tcp.conf UserParameterESTABLISHED,netstat -antp |grep -c ESTABLISHED UserParameterSYN_SENT,netstat -antp |grep -c SYN_SENT Use…

Obsidian/Typora設置圖床

在obsidian中默認圖片是保存在本地的,但是在要導出文檔上傳到網上時,由于圖片保存在本地,會出現無法加載圖片的問題。 這里引用的一段話: 這里使用picgo-core和gitee實現圖床功能, 參考1: Ubuntu下PicGO配…

Github學習

1.Git與Github 區別: Git是一個分布式版本控制系統,簡單的說就是一個軟件,用于記錄一個或若干個文件內容變化,以便將來查閱特點版本修訂情況的軟件。 Github是一個為用戶提高Git服務的網站,簡單說就是一個可以放代碼的地方。Gi…

C語言 | Leetcode C語言題解之第85題最大矩形

題目&#xff1a; 題解&#xff1a; int maximalRectangle(char** matrix, int matrixSize, int* matrixColSize) {int m matrixSize;if (m 0) {return 0;}int n matrixColSize[0];int left[m][n];memset(left, 0, sizeof(left));for (int i 0; i < m; i) {for (int j …

SeetaFace6人臉活體檢測C++代碼實現Demo

SeetaFace6包含人臉識別的基本能力&#xff1a;人臉檢測、關鍵點定位、人臉識別&#xff0c;同時增加了活體檢測、質量評估、年齡性別估計&#xff0c;并且順應實際應用需求&#xff0c;開放口罩檢測以及口罩佩戴場景下的人臉識別模型。 官網地址&#xff1a;https://github.co…

【補充】圖神經網絡前傳——DeepWalk

論文閱讀 論文&#xff1a;https://arxiv.org/pdf/1403.6652 參考&#xff1a;【論文逐句精讀】DeepWalk&#xff0c;隨機游走實現圖向量嵌入&#xff0c;自然語言處理與圖的首次融合_隨機游走圖嵌入-CSDN博客 abstract DeepWalk是干什么的&#xff1a;在一個網絡中學習頂點…

【Mac】Ghost Buster Pro(蘋果電腦內存清理專家) v3.2.5安裝教程

軟件介紹 Ghost Buster pro是一款針對Mac系統的電腦清理和優化工具&#xff0c;可以幫助用戶清理系統垃圾、修復注冊表錯誤、卸載不需要的軟件、管理啟動項等&#xff0c;從而提高系統性能和穩定性。 安裝教程 1.打開鏡像包&#xff0c;拖動「Ghost Buster Pro」到應用程序中…

GIT SSL certificate problem

簡單來說&#xff0c;SSL 協議可以為你的 Web 瀏覽器或其他進程提供一種安全的通道&#xff0c;使服務器和客戶端之間的數據傳輸過程不被第三方竊取或篡改。這非常重要&#xff0c;特別是在處理敏感數據&#xff0c;比如信用卡信息、用戶名和密碼等情況下。 現在&#xff0c;S…

Flutter 中的 Row 小部件:全面指南

Flutter 中的 Row 小部件&#xff1a;全面指南 在 Flutter 中&#xff0c;Row 是一個水平布局的小部件&#xff0c;用于將子控件沿著水平軸排列。Row 類似于 HTML 中的 div 標簽&#xff0c;但僅限于水平布局。它非常適合用來創建行式布局&#xff0c;如表單輸入、按鈕組、標簽…

【linux軟件基礎知識】完全公平調度

完全公平調度&#xff08;CFS&#xff09; CFS根據每個進程相對于所有可運行線程總權重的權重為每個進程分配一個“時間片”。 CFS 的目標是近似“無限小”的調度持續時間&#xff0c;稱為目標延遲。 較小的目標延遲可以提高交互性并接近完美的多任務處理&#xff0c;但其代價…

【Linux網絡】Https【下】{CA認證/證書的簽發與認證/安全性/總結}

文章目錄 1.引入證書【為方案五鋪墊】1.1再談https1.2SSL/TLS1.3CA機構1.4理解數字簽名1.4繼續鋪墊1.5方案五服務端申請證書回顧一二三回顧方案四方案五過程尋找方案五的漏洞客?端對證書進?認證 2.查看證書2.1查看瀏覽器的受信任證書發布機構2.2中間?有沒有可能篡改該證書2.…

差分約束 C++ 算法例題

差分約束 差分約束 是一種特殊的 n 元一次不等式組&#xff0c;m 個約束條件&#xff0c;可以組成形如下的格式&#xff1a; { x 1 ? x 1 ′ ≤ y 1 x 2 ? x 2 ′ ≤ y 2 ? x m ? x m ′ ≤ y m \begin{cases} x_1-x_1^{} \le y_1 \\ x_2-x_2^{} \le y_2 \\ \cdots \\ x_…

數據庫的要求

本來我是不準備寫數據庫的。而且是準備從零開始&#xff0c;學習python&#xff0c;學完語言學&#xff0c;會c和寫作技法&#xff0c;再來學習數據庫 那樣做的復雜度是天量的&#xff0c;按部就班什么的具備&#xff0c;因為你完全不清楚什么時候就有這個基礎和條件&#xff0…

【53】Camunda8-Zeebe核心引擎-Partitions分區與Internal processing內部處理

Partitions分區 在Zeebe中,所有數據都是基于分區的。(一個)分區本質上是一個關于流程事件的持久化流。在broker集群中,分區分布在節點之間,因此可以將其視為分片。啟動/初始化Zeebe 集群時,用戶可以配置所需的分區數。如果使用過Kafka,這部分內容是比較相似的。 每當部…

SpringBoot集成jxls2實現復雜(多表格)excel導出

核心依賴 需求 導出多個表格&#xff0c;包含圖片&#xff0c;類似商品標簽 1.配置模板 創建一個xlsx的模板文件&#xff0c;配置如下 該模板進行遍歷了兩次&#xff0c;因為我想要導出的數據分為兩列展示&#xff0c;左右布局&#xff0c;一個循環實現不了&#xff0c;所以采…

【ARM64 常見匯編指令學習 20.1 -- ARM 偽指令 .include】

請閱讀【嵌入式開發學習必備專欄】 文章目錄 ARM 編譯指令 .include 使用介紹a.s 文件b.s 文件小結 ARM 編譯指令 .include 使用介紹 在UEFI&#xff08;統一可擴展固件接口&#xff09;開發中&#xff0c;通常會用到匯編語言文件&#xff08;.s 或 .S 文件&#xff09;。如果…

百面算法工程師 | 正則優化函數——BN、LN、Dropout

本文給大家帶來的百面算法工程師是正則優化函數&#xff0c;文章內總結了常見的提問問題&#xff0c;旨在為廣大學子模擬出更貼合實際的面試問答場景。在這篇文章中&#xff0c;我們將總結一些BN、LN、Dropout的相關知識&#xff0c;并提供參考的回答及其理論基礎&#xff0c;以…

Linux kbdconfig命令教程:鍵盤設置與配置(附案例詳解和注意事項)

Linux kbdconfig命令介紹 kbdconfig&#xff08;鍵盤配置&#xff09;是一個用于設置鍵盤類型的程序&#xff0c;提供圖形化的操作界面。kbdconfig實際上是修改/etc/sysconfig/keyboard的鍵盤配置文件。 Linux kbdconfig命令適用的Linux版本 kbdconfig命令主要在Red Hat Lin…

電商秒殺系統-案例04-redis下的session控制

前言&#xff1a; 在現代的Web應用中&#xff0c;安全和高效的用戶身份驗證機制是至關重要的。本文將深入探討基于令牌的用戶登錄會話機制&#xff0c;特別是在使用Redis進行會話管理的情景。通過這一案例實戰&#xff0c;我們將了解令牌如何在用戶身份驗證過程中發揮核心作用&…