MYSQL 怎麼獲取DB operation系統中的關鍵信息(一)

Database management 一定會被問及很多事情,並且自己也得平時也的預先了解一些事情以防止某些可以預防的事情。今天就總結一些常用的query sql,方便應付各種 asking.

1  統計用戶表中的字段,(被問及一個表有多少字段,應對有沒有變態的字段類型或長度,那個有唯一主鍵等等)

SELECT

         INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA ,

               INFORMATION_SCHEMA.COLUMNS.TABLE_NAME,

               INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME,

               INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION,

               INFORMATION_SCHEMA.COLUMNS.DATA_TYPE,

               INFORMATION_SCHEMA.COLUMNS.COLUMN_KEY,

               INFORMATION_SCHEMA.COLUMNS.EXTRA

FROM INFORMATION_SCHEMA.COLUMNS

WHERE INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA not in ('information_schema','mysql','sys','performance_schema');

2  查看用戶的數據庫中是否有外鍵的使用

SELECT

    INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_NAME,

    INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME,

   INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_NAME,               INFORMATION_SCHEMA.KEY_COLUMN_USAGE.REFERENCED_TABLE_NAME,

INFORMATION_SCHEMA.KEY_COLUMN_USAGE.REFERENCED_COLUMN_NAME

FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE

where INFORMATION_SCHEMA.KEY_COLUMN_USAGE.REFERENCED_TABLE_NAME is not null

3  查看當前數據庫instance 所有數據庫的容量

SELECT table_schema "Database Name", 

SUM( data_length + index_length)/1024/1024 "Database Size (MB)" 

FROM information_schema.TABLES

group by table_schema;

4  查看 (employees) 數據庫中所有的表的佔用的空間

SELECT table_name "Table Name", table_rows "Rows Count", 

round(((data_length + index_length)/1024/1024),2) "Table Size (MB)" 

FROM information_schema.TABLES WHERE table_schema = "employees" 

5 查看當前的客戶端連接數據庫情況

select host, current_connections,statements from sys.host_summary; 

6 查看當前連接到數據庫中,運行次數最多的SQL

select * from sys.statement_analysis order by exec_count desc limit 10;

7 查看當前系統I/O 中使用最量最大的前十文件

select * from sys.io_global_by_file_by_bytes limit 10; 

8 查看平均延遲比較嚴重的

select * from sys.statement_analysis order by avg_latency desc limit 1

9 查看平均延遲比較嚴重的語句 TOP 10

select * from sys.statement_analysis order by avg_latency desc limit 

10  查看系統中從未使用過的索引

select * from sys.schema_unused_indexes; 

11  查看系統中冗餘的索引

 select table_schema,table_name,redundant_index_name,redundant_index_columns,dominant_index_name,dominant_index_columns from sys.schema_redundant_indexes;

12 那些表使用了臨時表

select db, query, tmp_tables,tmp_disk_tables from sys.statement_analysis where tmp_tables>0 or tmp_disk_tables >0 order by(tmp_tables+tmp_disk_tables) desc limit 20;

13 那些表佔用的buffer pool 最多

select * from sys.innodb_buffer_stats_by_table order by pages desc limit 10 

14 查看每個鏈接佔用的內存

select b.user, current_count_used,current_allocated, current_avg_alloc, current_max_alloc,total_allocated,current_statement from sys.memory_by_thread_by_current_bytes a,sys.session b where a.thread_id = b.thd_id;

15 查看MYSQL 內部的連接線程的數量

select user, count(*) from sys.processlist group by user;

16  查看各個表自增ID使用情況

select * from sys.schema_auto_increment_columns limit 10;  

17  查看當前的數據庫中是否有全表掃描的語句,並反映相關沒有使用索引的具體情況

select query,db,exec_count,total_latency,no_index_used_count,no_good_index_used_count,last_seen from sys.statements_with_full_table_scans;

18 查看當前系統中最慢的10條執行的 SQL

select query,db,full_scan,exec_count,avg_latency,rows_sent from sys.statements_with_runtimes_in_95th_percentile;

19 系統中那些事件延遲並根據平均延遲時間排序

select * from sys.wait_classes_global_by_latency;

20 當前如果有鎖的情況下,會在此表顯示鎖信息

select * from sys.schema_table_lock_waits;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章