mysql DBA常用的sql

  • 是否一般查询日志,默认关闭

    show variables like 'general_log';

  • 是否开启慢日志查询 默认关闭

    show global variables like 'slow_query_log';

  • 开启慢日志查询

    SET GLOBAL slow_query_log = 'ON';

  • 默认是10 单位s

    SELECT @@long_query_time;

  • 设置超过1s就算慢查

    SET GLOBAL long_query_time=1;

  • 查询数量小于这个值,不计入慢查询,默认是 0

    SELECT @@min_examined_row_limit;

  • 慢查默认不包括管理语句,比如创建表、创建索引等等

    SELECT @@log_slow_admin_statements;

  • 默认也不记录不使用索引的慢查

    SELECT @@log_queries_not_using_indexes;

  • 日志保存方式,FILE 或 TABLE, 也可以TABLE,FILE 或者NONE 代表禁用日志写入

  • table是将慢日志添加至表中,FILE是将慢日志添加至慢日志文件

  • 慢查存在哪里

    SELECT @@log_output;

  • 比如我希望2边都保存

    SET GLOBAL log_output='table,file';

  • 为file,那么保存的文件路径为slow_query_log_file

    SELECT @@slow_query_log_file;

    SET GLOBAL slow_query_log_file='/data/soft/mysql/123.log';

  • 为表,则保存在mysql.slow_log表中

    select * from mysql.slow_log;

  • 根据表结构创建空表

    CREATE TABLE new_table LIKE old_table;

  • 复制表结构与数据到新表

    CREATE TABLE new_table AS SELECT * FROM old_table;

  • 查看表结构

    DESCRIBE bfa.bfa_ic_invoice;

  • 查询线程

    show status like 'Threads%';

Variable_name Value note
Threads_cached 4 缓存的线程数,thread_cache_size 默认-1,自动调整,最大是16384
Threads_connected 177 当前打开的线程数
Threads_created 195261 创建的线程总数
Threads_running 1 正在运行的线程数
  • 查询thread_cache_size系统变量
    SELECT @@thread_cache_size;
  • 显示用户正在运行的线程
    show FULL PROCESSLIST;
字段名 字段含义
user 操作的用户名
host 地址
db 操作的DB
command 当前连接执行的命令 休眠、查询 sleep为空闲连接
time 这个状态持续的时间,单位是秒
state 状态
info 执行信息

删除线程,阻塞线程之类的格式为

KILL command id;

例如

KILL sleep 1234;

  • 查询最大使用链接
    show status like 'Max_used_connections%';
Variable_name Value note
Max_used_connections 464 自服务启动以来最大的连接数
Max_used_connections_time 2024-08-01 17:15:14 达到最大连接数的时间
  • 最大的连接数,超过该值不允许建立连接 默认151 1~100000

    SELECT @@max_connections;

  • 非交互连接等待的时间 (单位s) 默认28800 = 8小时 如果线程空闲8小时,就会断开

    SELECT @@wait_timeout;

  • 查询当前服务器支持的存储引擎

    SHOW ENGINES;

  • 临时表空间

  • 创建临时表

    CREATE TEMPORARY TABLE temp_table (

    id INT,

    name VARCHAR(50)

    );

  • 查询临时表,不同事务查不到,事务关闭后自动删除

    SELECT * FROM temp_table;

  • 查询页大小,默认16KB

    SELECT @@innodb_page_size;

  • 默认行格式 默认为 dynamic

    SELECT @@innodb_default_row_format;

  • 更改默认行格式

    SET GLOBAL innodb_default_row_format=DYNAMIC;

  • 查询bufferPool 默认134217728字节 /1024/1024

    SELECT @@innodb_buffer_pool_size;

  • 设置bufferPool的大小

    SET GLOBAL innodb_buffer_pool_size=402653184;

  • 刷脏线程数

  • 默认是4 但是不能超过buffer-pool的实例数

    SELECT @@innodb_page_cleaners;

  • buffer-pool的实例数

    SELECT @@innodb_buffer_pool_instances;

  • 通过以下2个参数来控制我内存中的脏页量

  • 当脏页数量低于特定阈值时InnoDB存储引擎开始刷新脏页的行为,默认10

    SELECT @@innodb_max_dirty_pages_pct_lwm;

  • 内存中可以存在的脏页的最大百分比

    SELECT @@innodb_max_dirty_pages_pct;

  • 表示在空闲时刷新脏页的百分比默认100 将全部脏页刷新 越高 跟磁盘的IO越多,因为要刷新的脏页也会越多

    SELECT @@innodb_idle_flush_pct;

  • 双写缓存区

  • 双写,就是page页刷新到磁盘的时候,把这个page数据写到不同的地方去,当出现问题是,有备份来达到持久性跟数据的一致性。

  • 默认开启 会加强一致性,但是会影响一定的性能

    SELECT @@innodb_doublewrite;

  • 默认为2 至少2个备份

    SELECT @@innodb_doublewrite_files;

  • 双写磁盘的位置配置

    SELECT @@innodb_doublewrite_dir;

    SELECT @@innodb_data_home_dir;

  • 没有配置则用默认

    SELECT @@datadir;

  • 哪些操作需要用到bufferpool

    SELECT @@innodb_change_buffering;

  • changebuffer的空间大小

  • 默认是内存空间的25%

    SELECT @@innodb_change_buffer_max_size;

  • logbuffer大小 默认16M

    select @@innodb_log_buffer_size;

  • RedoLog同步方案默认设置为1

    SELECT @@innodb_flush_log_at_trx_commit;

  • 查询表占用内存

    select TABLE_NAME, concat(truncate(data_length/1024/1024,2),' MB')as data_size,

    concat(truncate(index_length/1024/1024,2),' MB') as index_size

    from information_schema.tables where

    TABLE_SCHEMA = '数据库名' group by TABLE_NAME order by data_length desc;

  • 查看各个库的内存使用情况

    select 'all' as TABLE_SCHEMA ,

    truncate(sum(data_length)/1024/1024/1024,0) as data_size,

    truncate(sum(index_length)/1024/1024/1024,0) as index_size

    from information_schema.tables

    union all

    select TABLE_SCHEMA,

    truncate(sum(data_length)/1024/1024/1024,0) as data_size,

    truncate(sum(index_length)/1024/1024/1024,0) as index_size

    from information_schema.tables group by TABLE_SCHEMA order by data_size desc;

  • 释放空间的两种方案

    1、optimize table 数据库.表;

    2、alter table 数据库.表 ENGINE = 'InnoDB';

相关推荐
Zda天天爱打卡5 小时前
【趣学SQL】第二章:高级查询技巧 2.2 子查询的高级用法——SQL世界的“俄罗斯套娃“艺术
数据库·sql
苏-言7 小时前
MyBatis最佳实践:动态 SQL
数据库·sql·mybatis
doubt。8 小时前
【BUUCTF】[RCTF2015]EasySQL1
网络·数据库·笔记·mysql·安全·web安全
小辛学西嘎嘎9 小时前
MVCC在MySQL中实现无锁的原理
数据库·mysql
咩咩大主教12 小时前
Go语言通过Casbin配合MySQL和Gorm实现RBAC访问控制模型
mysql·golang·鉴权·go语言·rbac·abac·casbin
Amd79414 小时前
深入探讨存储过程的创建与应用:提高数据库管理效率的关键工具
sql·性能优化·数据安全·存储过程·数据库管理·业务逻辑·创建存储过程
Deutsch.14 小时前
MySQL——主从同步
mysql·adb
猿小喵14 小时前
MySQL四种隔离级别
数据库·mysql
祁思妙想15 小时前
【LeetCode】--- MySQL刷题集合
数据库·mysql
m0_7482480216 小时前
【MySQL】C# 连接MySQL
数据库·mysql·c#