MySQL查看数据库状态命令详细讲解
星光落入你灰蒙蒙的眼 人气:0前言
数据查询语言(DQL: Data Query Language):其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其它类型的SQL语句一起使用。
show status
使用SHOW STATUS语句能够获取MySQL服务器的一些状态信息,这些状态信息主要是MySQL数据库的性能参数。SHOW STATUS语句的语法格式如下:
SHOW [SESSION | GLOBAL] STATUS LIKE 'status_name';
其中,SESSION表示获取当前会话级别的性能参数,GLOBAL表示获取全局级别的性能参数,并且SESSION和GLOBAL可以省略,如果省略不写,默认为SESSION。status_name表示查询的参数值。熟练掌握这些参数的使用,能够更好地了解SQL语句的执行频率。SHOW STATUS语句支持的参数值
Not_flushed_key_blocks 在键缓存中已经改变但是还没被清空到磁盘上的键块。 Not_flushed_delayed_rows mysql> show status; +-----------------------------------------------+--------------------------------------------------+ | Variable_name | Value | +-----------------------------------------------+--------------------------------------------------+ | Aborted_clients | 1 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量| | Aborted_connects | 0 尝试已经失败的MySQL服务器的连接的次数 | | Binlog_cache_disk_use | 0 该状态表示有多少个事务使用了临时文件 | | Binlog_cache_use | 1 有多少个事物使用了ache_size来缓存未提交的事物日志 | | Binlog_stmt_cache_disk_use | 0 | | Binlog_stmt_cache_use | 0 | | Bytes_received | 248 从客户处已经接收到的字节数 | | Bytes_sent | 185 已经发送给所有客户的字节数 | | Com_statement | 0 每一个变量语句对应的次数 | | Connections | 41472 试图连接MySQL服务器的次数 | | Created_tmp_disk_tables | 0 服务器执行语句时在硬盘上自动创建的临时表的数量 | | Created_tmp_files | 5 mysqld创建的临时文件个数 | | Created_tmp_tables | 0 当执行语句时,已经被创造了的隐含临时表的数量 | | Delayed_errors | 0 用INSERT DELAYED写入的发生某些错误(可能重复键值)的行数 | | Delayed_insert_threads | 0 正在使用的延迟插入处理器线程的数量 | | Delayed_writes | 0 用INSERT DELAYED写入的行数 | | Flush_commands | 17 执行FLUSH命令的次数 | | Handler_commit | 0 内部COMMIT命令的个数 | | Handler_delete | 0 请求从一张表中删除行的次数 | | Handler_discover | 0 MySQL服务器可以问NDB CLUSTER存储引擎是否知道某一名字的表 | | Handler_external_lock | 0 | | Handler_mrr_init | 0 | | Handler_prepare | 0 两阶段提交操作准备阶段的计数器 | | Handler_read_first | 0 请求读入表中第一行的次数 | | Handler_read_key | 0 请求数字基于键读行 | | Handler_read_last | 0 | | Handler_read_next | 0 请求读入基于一个键的一行的次数 | | Handler_read_prev | 0 按照索引的顺序读取前面一行数据的请求的个数 | | Handler_read_rnd | 0 请求读入基于一个固定位置的一行的次数 | | Handler_read_rnd_next | 0 读取数据文件中下一行数据的请求的个数 | | Handler_rollback | 0 内部ROLLBACK命令的数量 | | Handler_savepoint | 0 在一个存储引擎放置一个保存点的请求数量 | | Handler_savepoint_rollback | 0 在一个存储引擎的要求回滚到一个保存点数目 | | Handler_update | 0 请求更新表中一行的次数 | | Handler_write | 0 请求向表中插入一行的次数 | | Innodb_buffer_pool_dump_status | Dumping of buffer pool not started | | Innodb_buffer_pool_load_status | Buffer pool(s) load completed at 220224 21:04:35 | | Innodb_buffer_pool_resize_status | | | Innodb_buffer_pool_pages_data | 32422 | | Innodb_buffer_pool_bytes_data | 531202048 | | Innodb_buffer_pool_pages_dirty | 0 | | Innodb_buffer_pool_bytes_dirty | 0 | | Innodb_buffer_pool_pages_flushed | 235 | | Innodb_buffer_pool_pages_free | 97929 | | Innodb_buffer_pool_pages_misc | 705 | | Innodb_buffer_pool_pages_total | 131056 | | Innodb_buffer_pool_read_ahead_rnd | 0 | | Innodb_buffer_pool_read_ahead | 23377 | | Innodb_buffer_pool_read_ahead_evicted | 0 | | Innodb_buffer_pool_read_requests | 330362716 InnoDB已经完成的逻辑读请求数 | | Innodb_buffer_pool_reads | 9004 | | Innodb_buffer_pool_wait_free | 0 | | Innodb_buffer_pool_write_requests | 3783 | | Innodb_data_fsyncs | 47 | | Innodb_data_pending_fsyncs | 0 | | Innodb_data_pending_reads | 0 | | Innodb_data_pending_writes | 0 | | Innodb_data_read | 530813440 | | Innodb_data_reads | 33379 | | Innodb_data_writes | 279 | | Innodb_data_written | 4193792 至此已经写入的数据量(字节) | | Innodb_dblwr_pages_written | 20 | | Innodb_dblwr_writes | 10 | | Innodb_log_waits | 0 我们必须等待的时间 | | Innodb_log_write_requests | 9 日志写请求数 | | Innodb_log_writes | 15 向日志文件的物理写数量 | | Innodb_os_log_fsyncs | 22 向日志文件完成的fsync()写数量 | | Innodb_os_log_pending_fsyncs | 0 挂起的日志文件fsync()操作数量 | | Innodb_os_log_pending_writes | 0 挂起的日志文件写操作 | | Innodb_os_log_written | 12288 写入日志文件的字节数 | | Innodb_page_size | 16384 编译的InnoDB页大小(默认16KB) | | Innodb_pages_created | 42 创建的页数 | | Innodb_pages_read | 32380 读取的页数 | | Innodb_pages_written | 235 写入的页数 | | Innodb_row_lock_current_waits | 0 当前等待的待锁定的行数 | | Innodb_row_lock_time | 0 行锁定花费的总时间,单位毫秒 | | Innodb_row_lock_time_avg | 0 行锁定的平均时间,单位毫秒 | | Innodb_row_lock_time_max | 0 行锁定的最长时间,单位毫秒 | | Innodb_row_lock_waits | 0 一行锁定必须等待的时间数 | | Innodb_rows_deleted | 6 从InnoDB表删除的行数 | | Innodb_rows_inserted | 2193 插入到InnoDB表的行数 | | Innodb_rows_read | 351814064 从InnoDB表读取的行数 | | Innodb_rows_updated | 0 InnoDB表内更新的行数 | | Innodb_num_open_files | 136 | | Innodb_truncated_status_writes | 0 | | Innodb_available_undo_logs | 128 | | Key_blocks_not_flushed | 0 键缓存内已经更改但还没有清空到硬盘上的键的数据块数量| | Key_blocks_unused | 53585 键缓存内未使用的块数量 | | Key_blocks_used | 3 用于关键字缓存的块的数量 | | Key_read_requests | 6 请求从缓存读入一个键值的次数 | | Key_reads | 3 从磁盘物理读入一个键值的次数 | | Key_write_requests | 0 请求将一个关键字块写入缓存次数 | | Key_writes | 0 将一个键值块物理写入磁盘的次数 | | Last_query_cost | 0.000000 | | Last_query_partial_plans | 0 | | Locked_connects | 0 | | Max_execution_time_exceeded | 0 | | Max_execution_time_set | 0 | | Max_execution_time_set_failed | 0 | | Max_used_connections | 330 同时使用的连接的最大数目 | | Max_used_connections_time | 2022-02-24 22:07:44 | | Not_flushed_delayed_rows | 0 在INSERT DELAY队列中等待写入的行的数量 | | Ongoing_anonymous_transaction_count | 0 | | Open_files | 5 打开文件的数量 | | Open_streams | 0 打开流的数量(主要用于日志记载) | | Open_table_definitions | 11 缓存的.frm文件数 | | Open_tables | 78 打开表的数量 | | Opened_files | 7925 系统打开过的文件总数 | | Opened_table_definitions | 0 已缓存的.frm文件数 | | Opened_tables | 0 已经打开的表的数量 | | Qcache_free_blocks | 1 查询缓存内自由内存块的数量 | | Qcache_free_memory | 1031832 用于查询缓存的自由内存的数量 | | Qcache_hits | 0 查询缓存被访问的次数 | | Qcache_inserts | 0 加入到缓存的查询数量 | | Qcache_lowmem_prunes | 0 由于内存较少从缓存删除的查询数量 | | Qcache_not_cached | 236889 非缓存查询数 | | Qcache_queries_in_cache | 0 登记到缓存内的查询的数量 | | Qcache_total_blocks | 1 查询缓存内的总块数 | | Queries | 561204 被服务器执行的语句个数 | | Questions | 2 发往服务器的查询的数量 | | Select_full_join | 0 | | Select_full_range_join | 0 | | Select_range | 0 | | Select_range_check | 0 | | Select_scan | 0 | | Slave_open_temp_tables | 0 | | Slow_launch_threads | 0 | | Slow_queries | 0 要花超过long_query_time时间的查询数量 | | Sort_merge_passes | 0 | | Sort_range | 0 | | Sort_rows | 0 | | Sort_scan | 0 | | Ssl_*** | 0 用于SSL连接的变量 | | Table_locks_immediate | 123 立即获得的表的锁的次数 | | Table_locks_waited | 0 不能立即获得的表的锁的次数 | | Tc_log_max_pages_used | 0 日志使用的最大页数 | | Tc_log_page_size | 0 用于XA恢复日志的内存映射实现的页面大小 | | Tc_log_page_waits | 0 对于恢复日志的内存映射实现 | | Threads_cached | 2 线程的缓存值 | | Threads_connected | 328 当前打开的连接的数量 | | Threads_created | 330 创建用来处理连接的线程数 | | Threads_running | 2 不在睡眠的线程数量 | | Uptime | 42686 服务器工作了多少秒 | | Uptime_since_flush_status | 42686 最近一次使用FLUSH STATUS 的时间(以秒为单位)| # 状态信息查询语句 --查看试图连接到MySQL(不管是否连接成功)的连接数 show status like 'connections'; --查看线程缓存内的线程的数量。 show status like 'threads_cached'; --查看当前打开的连接的数量。 show status like 'threads_connected'; --查看查询时间超过long_query_time秒的查询的个数。 show status like 'slow_queries'; --查看线程数 show status like 'Threads%'; Threads_connected : 这个数值指的是打开的连接数. Threads_running : 这个数值指的是激活的连接数,这个数值一般远低于connected数值. Threads_connected 跟show processlist结果相同,表示当前连接数。准确的来说,Threads_running是代表当前并发数 Threads_created 表示创建过的线程数,通过查看Threads_created就可以查看MySQL服务器的进程状态。(MySQL服务器的线程数需要在一个合理的范围之内,这样才能保证MySQL服务器健康平稳地运行) 如果我们在MySQL服务器配置文件中设置了thread_cache_size,当客户端断开之后,服务器处理此客户的线程将会缓存起来以响应下一个客户而不是销毁(前提是缓存数未达上限)。Threads_created表示创建过的线程数,如果发现Threads_created值过大的话,表明MySQL服务器一直在创建线程,这也是比较耗资源,可以适当增加配置文件中thread_cache_size值,查询服务器thread_cache_size的值: show variables like 'thread_cache_size'; # 通常mysql的最大连接数默认是100, 最大可以达到16384。 show variables like '%max_connection%'; 查看最大连接数 set global max_connections=200 SET GLOBAL innodb_lru_scan_depth=256; 影响对InnoDB缓冲池进行刷新操作的算法和启发式的参数。性能专家对调优I/ o密集型工作负载感兴趣。它指定了每个缓冲池实例,在缓冲池LRU页面下列出页面清洁线程扫描以查找要刷新的脏页的距离。这是每秒执行一次的后台操作。`小于默认值的设置通常适用于大多数工作负载`。如果值远高于必要值,可能会影响性能。只有在典型工作负载下有空闲I/O容量时,才考虑增加该值。相反,如果写密集的工作负载使I/O容量饱和,则减少该值,特别是在使用大型缓冲池的情况下。调优innodb_lru_scan_depth时,从一个较低的值开始,向上配置,目标是很少看到零空闲页面。另外,当改变缓冲池实例数时,可以考虑调整innodb_lru_scan_depth,因为innodb_lru_scan_depth * innodb_buffer_pool_instances定义了页面清理线程每秒执行的工作量。
show processlist;
show full processlist; 或 show processlist(默认只列出前100); //显示哪些线程正在运行
id #ID标识,要kill一个语句的时候很有用 user #当前连接用户 host #显示这个连接从哪个ip的哪个端口上发出 db #数据库名 command #连接状态,一般是休眠(sleep),查询(query),连接(connect) time #连接持续时间,单位是秒 state #显示当前sql语句的状态 info #显示这个sql语句
show slave status \G;
MySQL同步功能由3个线程(master上1个,slave上2个)来实现。执行 DE>START SLAVEDE> 语句后,slave就创建一个I/O线程。I/O线程连接到master上,并请求master发送二进制日志中的语句。master创建一个线程来把日志的内容发送到slave上。这个线程在master上执行 DE>SHOW PROCESSLISTDE> 语句后的结果中的 DE>Binlog DumpDE> 线程便是。slave上的I/O线程读取master的 DE>Binlog DumpDE> 线程发送的语句,并且把它们拷贝到其数据目录下的中继日志(relay logs)中。第三个是SQL线程,slave用它来读取中继日志,然后执行它们来更新数据。
用于提供有关从属服务器线程的关键参数的信息
Slave_IO_State: ID线程的状态,如果master 的所有变更都已经收到这个状态会显示为 Waiting for master to send event Master_Log_File: IO线程正在读取的master binlog 文件名 Read_Master_Log_Pos: IO线程已经读完的位置 Relay_Master_Log_File: SQL线程正在读取的master binlog 文件名 Exec_Master_Log_Pos: SQL线程已经读取完的位置 Slave_IO_State: SHOW PROCESSLIST输出的State字段的拷贝。 SHOW PROCESSLIST用于从属I/O线程。如果线程正在试图连接到主服务器,正在等待来自主服务器的时间或正在连接到主服务器等,本语句会通知您
日志
日志类型 | 写入日志的信息 |
---|---|
错误日志 | 记录在启动,运行或停止mysqld时遇到的问题 |
通用查询日志 | 记录建立的客户端连接和执行的语句 |
二进制日志 | 记录更改数据的语句 |
中继日志 | 从复制主服务器接收的数据更改 |
慢查询日志 | 记录所有执行时间超过 long_query_time 秒的所有查询或不使用索引的查询 |
DDL日志(元数据日志) | 元数据操作由DDL语句执行 |
# mysqlbinlog [options] logfile1 logfile2 ... mysqlbinlog的选项 -d, --database=name 仅显示指定数据库的转储内容。 -o, --offset=# 跳过前N行的日志条目。 -r, --result-file=name 将输入的文本格式的文件转储到指定的文件。 -R, --read-from-remote-server 指示mysqlbinlog命令从远程服务器读取日志文件 -s, --short-form 使用简单格式(只显示SQL语句)。 --server-id 指定mysql服务器,确保是由给定服务器id的mysql服务器所生成的日志。 --set-charset=name 在转储文件的开头增加'SET NAMES character_set'语句。 --start-datetime=name 转储日志的起始时间。 --stop-datetime=name 转储日志的截止时间。 -j, --start-position=# 转储日志的起始位置。 --stop-position=# 转储日志的截止位置。 -v, --verbose 用行事件重构伪sql语句。 -vv 显示sql语句加字段类型。
查看日志
mysqlbinlog --no-defaults --database=qq --start-datetime='2022-02-11 18:00:00' --stop-datetime='2022-02-11 20:00:00' --base64-output=decode-rows -v mysql-bin.000052 >18-20.log
增加 --base64-output=decode-rows –v 选项解析(目的:变成人类可以读懂的SQL语句了)
使用base64-output选项,可以控制输出语句何时是输出base64编码的BINLOG语句。以下是base64输出设置的可能值:
never //它将在输出中显示base64编码的BINLOG语句 always //只要有可能,它将只显示BINLOG项 decode-rows //将把基于行的事件解码成一个SQL语句 auto(默认) //仅为某些事件类型打印BINLOG项,例如基于行的事件和格式描述事件
总结
加载全部内容