zoukankan      html  css  js  c++  java
  • 常用有效检测数据库运行状态SQL脚本

    查看正在执行的SQL

    SELECT * FROM information_schema.processlist WHERE command !='Sleep';


    查看数据库中的锁请求信息

    SELECT r.`trx_id` waiting_trx_id,
    r.`trx_mysql_thread_id` waiting_thread,
    r.`trx_query` waiting_query,
    b.`trx_id` bolcking_trx_id,
    b.`trx_mysql_thread_id` blocking_thread,
    b.`trx_query` block_query
    FROM information_schema.`INNODB_LOCK_WAITS` w
    INNER JOIN information_schema.`INNODB_TRX` b
    ON b.`trx_id`= w.`blocking_trx_id`
    INNER JOIN information_schema.`INNODB_TRX` r
    ON r.`trx_id`= w.`requesting_trx_id`;


    表中查看当前未提交的事务

    select trx_state, trx_started, trx_mysql_thread_id, trx_query from information_schema.innodb_trxG

    查看数据库中不为 InnoDB 引擎的表

    SELECT TABLE_SCHEMA, TABLE_NAME, ENGINE
    FROM information_schema.TABLES
    WHERE TABLE_SCHEMA NOT IN
    ('sys', 'mysql', 'performance_schema', 'information_schema', 'test')
    AND ENGINE != 'InnoDB';


    查看数据库中表的大小及数据量
    查看总的数据库大小
    select SUM(DATA) from (
    SELECT TABLE_SCHEMA ,SUM(DATA) as data FROM (
    SELECT TABLE_SCHEMA,
    CONCAT(ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024, 2), 'GB') AS DATA
    FROM information_schema.TABLES
    WHERE TABLE_SCHEMA NOT IN
    ('sys', 'mysql', 'performance_schema', 'information_schema', 'test') )X GROUP BY TABLE_SCHEMA
    ) xx;


    查看各个数据库大小

    SELECT TABLE_SCHEMA ,SUM(DATA) FROM (
    SELECT TABLE_SCHEMA,
    CONCAT(ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024 / 1024, 2), 'GB') AS DATA
    FROM information_schema.TABLES
    WHERE TABLE_SCHEMA NOT IN
    ('sys', 'mysql', 'performance_schema', 'information_schema', 'test') )X GROUP BY TABLE_SCHEMA
    ORDER BY 2 DESC ;

    查看每个表大小

    SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_ROWS,
    CONCAT(round((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2), 'MB') as data
    FROM information_schema.TABLES
    WHERE TABLE_SCHEMA NOT IN
    ('sys', 'mysql', 'performance_schema', 'information_schema', 'test')
    ORDER BY DATA_LENGTH + INDEX_LENGTH DESC;


    查找数据库中无显式主键索引的表

    SELECT t.TABLE_SCHEMA, t.TABLE_NAME
    FROM information_schema.TABLES t
    WHERE (t.TABLE_SCHEMA, t.TABLE_NAME) NOT IN
    (SELECT DISTINCT TABLE_SCHEMA, TABLE_NAME
    FROM information_schema.COLUMNS
    WHERE COLUMN_KEY = 'PRI')
    AND t.TABLE_SCHEMA NOT IN
    ('sys', 'mysql', 'performance_schema', 'information_schema', 'test');


    查找数据库中主键为联合主键的表

    SELECT TABLE_SCHEMA, TABLE_NAME,
    GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX SEPARATOR ',') cols,
    MAX(SEQ_IN_INDEX) len
    FROM information_schema.STATISTICS
    WHERE INDEX_NAME = 'PRIMARY'
    AND TABLE_SCHEMA NOT IN
    ('sys', 'mysql', 'performance_schema', 'information_schema', 'test')
    GROUP BY TABLE_SCHEMA, TABLE_NAME
    HAVING len > 1;


    查找数据库中不为自增主键的表

    SELECT TABLE_SCHEMA, TABLE_NAME
    FROM information_schema.TABLES
    WHERE TABLE_SCHEMA NOT IN ('sys', 'mysql', 'performance_schema', 'information_schema', 'test')
    AND (TABLE_SCHEMA,TABLE_NAME) NOT IN
    (SELECT TABLE_SCHEMA, TABLE_NAME
    FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA NOT IN ('sys', 'mysql', 'performance_schema', 'information_schema', 'test')
    AND IS_NULLABLE = 'NO'
    AND COLUMN_TYPE LIKE '%int%'
    AND COLUMN_KEY = 'PRI'
    AND EXTRA = 'auto_increment');


    查看数据库中存在外键约束的表

    SELECT c.TABLE_SCHEMA,
    c.REFERENCED_TABLE_NAME,
    c.REFERENCED_COLUMN_NAME,
    c.TABLE_NAME,
    c.COLUMN_NAME,
    c.CONSTRAINT_NAME,
    t.TABLE_COMMENT,
    r.UPDATE_RULE,
    r.DELETE_RULE
    FROM information_schema.KEY_COLUMN_USAGE c
    JOIN information_schema.TABLES t
    ON t.TABLE_NAME = c.TABLE_NAME
    JOIN information_schema.REFERENTIAL_CONSTRAINTS r
    ON r.TABLE_NAME = c.TABLE_NAME
    AND r.CONSTRAINT_NAME = c.CONSTRAINT_NAME
    AND r.REFERENCED_TABLE_NAME = c.REFERENCED_TABLE_NAME
    WHERE c.REFERENCED_TABLE_NAME IS NOT NULL;


    查找数据库中低区分度索引(区分度小于0.1)

    SELECT p.TABLE_SCHEMA, p.TABLE_NAME, c.INDEX_NAME, c.car, p.car total
    FROM (SELECT TABLE_SCHEMA, TABLE_NAME, INDEX_NAME, MAX(CARDINALITY) car
    FROM information_schema.STATISTICS
    WHERE INDEX_NAME != 'PRIMARY'
    AND TABLE_SCHEMA NOT IN ('sys', 'mysql', 'performance_schema', 'information_schema', 'test')
    GROUP BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME) c
    INNER JOIN (SELECT TABLE_SCHEMA, TABLE_NAME, MAX(CARDINALITY) car
    from information_schema.STATISTICS
    WHERE INDEX_NAME = 'PRIMARY'
    AND TABLE_SCHEMA NOT IN ('sys', 'mysql', 'performance_schema', 'information_schema', 'test')
    GROUP BY TABLE_SCHEMA, TABLE_NAME) p
    ON c.TABLE_NAME = p.TABLE_NAME
    AND c.TABLE_SCHEMA = p.TABLE_SCHEMA
    WHERE p.car > 0
    AND c.car / p.car < 0.1;


    查找数据库中重复索引前缀的索引

    SELECT a.TABLE_SCHEMA, a.TABLE_NAME, a.INDEX_NAME, a.cols, b.INDEX_NAME, b.cols
    FROM (SELECT TABLE_SCHEMA, TABLE_NAME, INDEX_NAME,
    CONCAT('| ', GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX SEPARATOR ' | '), ' |') AS cols
    FROM information_schema.STATISTICS
    WHERE TABLE_SCHEMA NOT IN ('sys', 'mysql', 'performance_schema', 'information_schema', 'test')
    AND INDEX_NAME != 'PRIMARY'
    GROUP BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME) a
    INNER JOIN (SELECT TABLE_SCHEMA, TABLE_NAME, INDEX_NAME,
    CONCAT('| ', GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX SEPARATOR ' | '), ' |') AS cols
    FROM information_schema.STATISTICS
    WHERE TABLE_SCHEMA NOT IN ('sys', 'mysql', 'performance_schema', 'information_schema', 'test')
    AND INDEX_NAME != 'PRIMARY'
    GROUP BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME) b
    ON a.TABLE_NAME = b.TABLE_NAME
    AND a.TABLE_SCHEMA = b.TABLE_SCHEMA
    AND a.cols LIKE CONCAT(b.cols, '%')
    AND a.INDEX_NAME != b.INDEX_NAME;


    查找数据库中包索引重复包含主键列的索引

    SELECT a.*, b.pk
    FROM (SELECT TABLE_SCHEMA, TABLE_NAME, INDEX_NAME,
    CONCAT('| ', GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX SEPARATOR ' | '), ' |') cols
    FROM information_schema.STATISTICS
    WHERE INDEX_NAME != 'PRIMARY'
    AND TABLE_SCHEMA NOT IN ('sys', 'mysql', 'performance_schema', 'information_schema', 'test')
    GROUP BY TABLE_SCHEMA, TABLE_NAME, INDEX_NAME) a
    INNER JOIN (SELECT TABLE_SCHEMA, TABLE_NAME,
    CONCAT('| ', GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX SEPARATOR ' | '), ' |') pk
    FROM information_schema.STATISTICS
    WHERE INDEX_NAME = 'PRIMARY'
    AND TABLE_SCHEMA NOT IN ('sys', 'mysql', 'performance_schema', 'information_schema', 'test')
    GROUP BY TABLE_SCHEMA, TABLE_NAME) b
    ON a.TABLE_NAME = b.TABLE_NAME
    AND a.TABLE_SCHEMA = b.TABLE_SCHEMA
    AND a.cols LIKE CONCAT('%', b.pk, '%');


    查找数据库中没有被使用的索引

    SELECT a.OBJECT_SCHEMA, a.OBJECT_NAME, a.INDEX_NAME, b.TABLE_ROWS
    FROM performance_schema.TABLE_IO_WAITS_SUMMARY_BY_INDEX_USAGE a
    INNER JOIN information_schema.TABLES b
    ON a.OBJECT_SCHEMA = b.TABLE_SCHEMA
    AND a.OBJECT_NAME = b.TABLE_SCHEMA
    WHERE a.INDEX_NAME IS NOT NULL
    AND a.INDEX_NAME != 'PRIMARY'
    AND a.COUNT_STAR = 0
    AND OBJECT_SCHEMA NOT IN
    ('sys', 'mysql', 'performance_schema', 'information_schema')
    ORDER BY OBJECT_SCHEMA, OBJECT_NAME;

    查找数据库中没有创建索引的表

    SELECT t.table_schema,t.table_schema FROM information_schema.tables AS t
    LEFT JOIN (SELECT DISTINCT table_schema, table_name FROM information_schema.`KEY_COLUMN_USAGE` ) AS kt ON kt.table_schema=t.table_schema AND kt.table_name = t.table_name
    WHERE t.table_schema NOT IN ('mysql', 'information_schema', 'performance_schema', 'test','sys','zabbix') AND kt.table_name IS NULL



    MySQL 查询某个数据库中所有包含数据记录的表名

    select TABLE_NAME
    from information_schema.TABLES
    where TABLE_SCHEMA = '需要查询的数据库名' and TABLE_ROWS > 0;

    查看MySQL里谁消耗了内存:
    SELECT event_name,SUM_NUMBER_OF_BYTES_ALLOC FROM
    performance_schema.memory_summary_global_by_event_name
    ORDER BY SUM_NUMBER_OF_BYTES_ALLOC DESC LIMIT 10;


    查看MySQL里哪些内部线程消耗了内存:
    select event_name, SUM_NUMBER_OF_BYTES_ALLOC from
    performance_schema.memory_summary_by_thread_by_event_name
    order by SUM_NUMBER_OF_BYTES_ALLOC desc limit 20;

  • 相关阅读:
    显示所有用户,mysql的基本操作
    创建用户的方法 3种mysql创建方法
    mysql在win系统dos 安装版配置步骤详解
    Docker学习(二) 数据卷(Volume)的使用
    Docker学习-私有仓库docker-registry的使用
    php 调用curl_init失败
    ubuntu 远程 window
    ubuntu 16.04服务器安装apache2 + php + mysql
    Git 的简单使用及ssh配置问题-赖大大
    python scrapy 爬取西刺代理ip(一基础篇)(ubuntu环境下) -赖大大
  • 原文地址:https://www.cnblogs.com/liang545621/p/9400980.html
Copyright © 2011-2022 走看看