postgresql索引使用情況及壞索引處理


1、postgresql中索引系統視圖pg_stat_user_indexes

TEST=# \d+ sys_stat_user_indexes
View "SYS_CATALOG.sys_stat_user_indexes"
Column | Type | Modifiers | Storage | Description
---------------+--------+-----------+---------+-------------
relid | OID | | plain |
indexrelid | OID | | plain |
schemaname | NAME | | plain |
relname | NAME | | plain |
indexrelname | NAME | | plain |
idx_scan | BIGINT | | plain |
idx_tup_read | BIGINT | | plain |
idx_tup_fetch | BIGINT | | plain |
View definition:
SELECT sys_stat_all_indexes.relid,
sys_stat_all_indexes.indexrelid,
sys_stat_all_indexes.schemaname,
sys_stat_all_indexes.relname,
sys_stat_all_indexes.indexrelname,
sys_stat_all_indexes.idx_scan,
sys_stat_all_indexes.idx_tup_read,
sys_stat_all_indexes.idx_tup_fetch
FROM sys_stat_all_indexes
WHERE (sys_stat_all_indexes.schemaname <> ALL (ARRAY['SYS_CATALOG'::NAME, 'INFORMATION_SCHEMA'::NAME])) AND sys_stat_all_indexes.schemaname !~ '^SYS_TOAST'::TEXT;

2、pg_stat_user_indexes中column含義

test=# select *from pg_stat_user_indexes;
-[ RECORD 1 ]-+----------
relid | 16447 #相關表的oid
indexrelid | 16450 #索引的oid
schemaname | public #模式名
relname | t3 #表名
indexrelname | t3_id_idx #索引名
idx_scan | 0 #通過索引掃描的次數,如果該值很小,說明該索引很少被用到,可以考慮刪除
idx_tup_read | 0 #通過任意索引方法返回的索引行數
idx_tup_fetch | 0 #通過索引方法返回的數據行數

3、查看所有表的索引使用情況

select relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch from sys_stat_user_indexes order by idx_scan asc, idx_tup_read asc, idx_tup_fetch asc;

4、查看某張表索引使用情況

select relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch from sys_stat_user_indexes where relname = 't1' order by idx_scan asc, idx_tup_read asc,  idx_tup_read asc, idx_tup_fetch asc;

5、修復損壞索引

通過pg_dump驗證到底是索引塊還是表塊損壞,因為pg_dump不使用索引,直接從表中獲取數據。

驗證故障現象

通過全表訪問數據
set enable_indexscan =‘off’;
explain analzye select * from 表對象
通過索引訪問數據
explain analzye select * from 表對象

a、rebuild index --該方式會鎖表,DML和select都會被鎖,需要根據實際業務申請維護時間
b、rebuild index concurrently --postgresl12才的功能
c、create index concurrently --並發創建索引,會使表的插入更新操作變慢,但不會鎖表(推薦使用該方法)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM