操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    目錄

    3.2 SQL執行統計視圖

    3.3 視圖顯示訪問特定表的統計信息

    3.4 視圖顯示特定索引的統計

    四、參考資料

    一、前言

    關于sql優化,面試或工作中,都是高頻遇到的問題。自己也時常被難住,基于此,特將看到或用到的一些sql優化信息進行整理,以便有問題時,自己也可以方便復現或者解決問題。

    二、sql優化目標思考出發點

    為何優化sql優化,無非就是想要快速獲取查詢數據的結果,對應到一些專業術語:高性能、高效。那判斷高效的標準:在滿足業務需求的情況下,執行sql語句耗時最少或者盡可能少。

    sql優化的目標是讓 sql程序執行時間盡可能短,那如何發現需要優化的sql呢?可以從以下三點出發考慮[1]:

    針對上述考慮,進一步需要明確的優化問題,可以從以下問題進一步明確:

    三、sql優化相關幫助視圖介紹3.1 系統內置活動視圖

    視圖將為每一個服務器進程顯示一行,顯示與該進程當前活動相關的信息。理論上能捕抓到每個實時的SQL,運行結束可能就會消失,也就是說實際上有些運行時間短的SQL人為可能會看不到。該視圖可以實時查詢當前在執行的SQL,包括狀態,比如是否阻塞、等待鎖等。

    3.1.1 視圖主要字段

    . :后端正在等待的事件類型,如果不存在則為 NULL。可能的值有:

    state:這個后端的當前總體狀態。可能的值是:

    3.1.2 常用sql

    select?*?from?pg_stat_activity;

    --?查找非空閑的SQL
    select?*?from?pg_stat_activity?where?state?<>'idle';
    --?按照開始時間進行排序
    select?*,now()-query_start?from?pg_stat_activity?where?state?<>'idle'?ORDER?BY?query_start?asc?;

    --?kill?SQLpg_terminate_backend(PID);
    SELECT?pg_terminate_backend(15322);

    阻塞問題:如果是非異常的阻塞,可以直接kill掉,使用。

    注意:

    其他字段的詳細介紹可以進一步參考:[2]監控數據庫活動。

    3.2 SQL執行統計視圖

    數據庫資源分為多個維度、CPU、內存、IO 等,為能夠從各個維度層面查找最消耗數據庫資源的 SQL,您可以使用 插件統計數據庫的資源開銷和分析 Top SQL。該統計視圖的使用需要安裝插件。

    執行如下命令,在需要查詢 TOP SQL 的數據庫中,創建 插件。

    ;

    3.2.1 視圖輸出內容介紹

    通過查詢 視圖,您可以得到數據庫資源開銷的統計信息。SQL 語句中的一些過濾條件在 中會被替換成變量,可以減少重復顯示的問題。

    視圖包含了一些重要信息,例如::

    下表列出了 輸出內容中各參數的含義。

    在這里插入圖片描述

    中文版(簡版)

    3.2.2 常見案例 Top SQL

    --最耗IO?SQL
    --單次調用最耗IO?SQL?TOP?5
    select?userid::regrole,?dbid,?query?from?pg_stat_statements?order?by?(blk_read_time+blk_write_time)/calls?desc?limit?5;
    --總最耗IO?SQL?TOP?5
    select?userid::regrole,?dbid,?query?from?pg_stat_statements?order?by?(blk_read_time+blk_write_time)?desc?limit?5;

    --最耗時?SQL
    --單次調用最耗時?SQL?TOP?5
    select?userid::regrole,?dbid,?query?from?pg_stat_statements?order?by?mean_time?desc?limit?5;?
    --總最耗時?SQL?TOP?5
    select?userid::regrole,?dbid,?query?from?pg_stat_statements?order?by?total_time?desc?limit?5;?

    --響應時間抖動最嚴重?SQL
    select?userid::regrole,?dbid,?query?from?pg_stat_statements?order?by?stddev_time?desc?limit?5;?

    --最耗共享內存?SQL
    select?userid::regrole,?dbid,?query?from?pg_stat_statements?order?by?(shared_blks_hit+shared_blks_dirtied)?desc?limit?5;
    ?
    --最耗臨時空間?SQL
    select?userid::regrole,?dbid,?query?from?pg_stat_statements?order?by?temp_blks_written?desc?limit?5;

    注意:因為參數化的問題,這里的SQL的是不可直接執行的,我們需要根據SQL的一些信息,在IDE中找到對應的邏輯,打日志,抓到對應的SQL數據庫中創建視圖的語句是,進行分析。我們需要重點關注:調用次數,總耗時,平均執行時間,這3個指標,SQL執行時間長,那說明有優化的空間。

    3.2.3 重置統計信息

    是累積的統計,如果要查看某個時間段的統計,需要查詢快照的信息,詳情請參見《 AWR報告(for 阿里云 PgSQL)》。您也可以通過執行如下命令,來定期清理歷史統計信息。

    eset();

    3.3 視圖顯示訪問特定表的統計信息

    索引主要用于查詢邏輯,一般用于大表。反過來數據庫中創建視圖的語句是,我們需要關注索引的使用情況。日常維護中觀察大表(所占存儲空間大、記錄多、索引所占空間大的表)和索引的情況,考慮是否需要為關鍵字段加索引、刪掉未曾使用過的索引。

    3.3.1 視圖輸出信息介紹

    視圖將包含 當前數據庫中每個表的一行(包括TOAST表),顯示訪問特定表的統計信息。和 視圖 包含相同的信息,但是過濾只分別顯示用戶和系統表。

    在這里插入圖片描述

    需要注意的數據:,,,。

    3.3.2 常用sql

    1.判斷表的大小

    --?問下pg怎么求大小?!
    select?*?from?pg_proc??where?proname?~?'size';
    --?按照頁的數量進行排序
    select?*?from?pg_class?where?relnamespace?=?2200?ORDER?BY?relpages?desc;
    --?按照實體的大小進行排序
    select?pg_size_pretty(pg_total_relation_size(oid)),*?from?pg_class?where?relnamespace?=?2200?and?relname?!~'bak|copy'?ORDER?BY?pg_total_relation_size(oid)?desc;
    select?pg_size_pretty(pg_total_relation_size(oid)),*?from?pg_class?where?relnamespace?=?2200?and?relkind?=?'r'?and?relname?!~'bak|copy'?ORDER?BY?pg_total_relation_size(oid)?desc;
    select?pg_size_pretty(pg_total_relation_size(oid)),*?from?pg_class?where?relnamespace?=?2200?and?relkind?=?'i'?and?relname?!~'bak|copy'?ORDER?BY?pg_total_relation_size(oid)?desc;
    select?pg_size_pretty(pg_total_relation_size(oid)),*?from?pg_class?where?relnamespace?=?2200?and?relkind?=?'m'?and?relname?!~'bak|copy'?ORDER?BY?pg_total_relation_size(oid)?desc;

    1.關注表使用情況

    --?seq_scanidx_scann_live_tupn_dead_tup
    select?*?from?pg_stat_user_tables?limit?10;
    select?*?from?pg_stat_user_tables?ORDER?BY?seq_scan?desc;
    select?*?from?pg_stat_user_tables?ORDER?BY?idx_scan?desc;
    select?*?from?pg_stat_user_tables?ORDER?BY?n_live_tup?desc;
    select?*?from?pg_stat_user_tables?ORDER?BY?n_dead_tup?desc;
    --?死亡元組多的表可以考慮清一波
    select?'VACUUM?VERBOSE?ANALYZE?'||?relname?||?';',*?from?pg_stat_user_tables?ORDER?BY?n_dead_tup?desc;

    --?排查:大表的全表掃描比索引掃描用得多的情況(考慮建索引)
    select?*?from?pg_stat_user_tables?where?seq_scan?>?idx_scan?ORDER?BY?seq_scan?desc;
    select?*?from?pg_stat_user_tables?where?n_live_tup?>?10000?and?seq_scan?>?idx_scan?ORDER?BY?seq_scan?desc;

    3.4 視圖顯示特定索引的統計3.4.1 視圖輸出內容介紹

    視圖將包含當前數據庫中的每個索引行,顯示訪問特定索引的統計。和 視圖包含相同的信息, 但是過濾只是分別顯示用戶和系統索引。

    在這里插入圖片描述3.4.2 常用sql

    --?查看某個表索引使用情況
    select?*?from?pg_stat_user_indexes?limit?10;
    select?*?from?pg_stat_user_indexes?where?relname?=?'test'?ORDER?BY?idx_scan?asc;

    根據 視圖找到需要關注的表,然后根據 視圖查看該表的索引使用情況。

    --?查看某個表索引使用情況
    select?*?from?pg_stat_user_indexes?limit?10;
    select?*?from?pg_stat_user_indexes?where?relname?=?'test'?ORDER?BY?idx_scan?asc;

    四、參考資料

    [1]之如何進行SQL優化?()

    [2]監控數據庫活動(#PG-STAT--VIEW)

    [3]查找最耗費資源的 SQL(Top SQL)()

    [4]:《 AWR報告(for 阿里云 PgSQL)》()

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有