SET 和 SHOW语法(三)
By admin
- 4 minutes read - 717 words译者:叶金荣(Email:),来源:MySQL手册版 本 5.0.20,转载请注明译者和出处,并且不能用于商业用途,违者必究。
14.5.3.16 SHOW PROCESSLIST
语法
SHOW [FULL] PROCESSLIST
SHOW PROCESSLIST
显示了有哪些线程在运行。也可以执行 mysqladmin processlist
命令来得到这些信息。如果有 SUPER
权限,则可以看到全部的线程,否则,只能看到自己发起的线程(这是指,当前对应的MySQL帐户运行的线程)。详情请看“14.5.4.3 KILL
Syntax”。如果没有使用 关键字 FULL
,则只能看到每个查询的前100个字符。
从MySQL 4.0.12起,结果中还会以的 host_name:client_port
格式来显示通过TCP/IP方式连接过来的客户端的主机名,这就可以知道每个客户端都正在做什么。
这个语句在出现“too many connections”错误时想看看都正在执行什么查询非常有用。MySQL为拥有 SUPER
权限的账户保留了一个额外的连接,这就保证让管理员总是可以连上检查系统状况(假定没有给每个系统账户都授予这个权限)。
SHOW PROCESSLIST
结果中一些常见的状态如下:
Checking table
- 正在检查数据表(这是自动的)。
Closing tables
- 正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已 经满了或者磁盘是否正处于重负中。
Connect Out
- 同步从服务器正在连接主服务器。
Copying to tmp table on disk
- 由于临时结果集大于
tmp_table_size
,正在将临时表从内存存储转为磁盘存储以节省内存。 Creating tmp table
- 正在创建临时表以存放部分查询结果。
deleting from main table
- 服务器正在执行多表删除中的第一部分,刚删除第一个表。
deleting from reference tables
- 服务器正在执行多表删除中的第二部分,正在删除其他表的记录。
Flushing tables
- 正在执行
FLUSH TABLES
,等待其他线程关闭数据表。 Killed
- 发送了一个
kill
请求给某线程,那么这个线程将会检查kill
标志位,同时会放弃下一个kill
请求。MySQL会在每次的主循环中检查kill
标志位,不过有些情况下该线程可能会过一小段才能死掉。如果该线程程被其他线程锁住了,那么kill
请求会在锁释放时马上生效。 Locked
- 被其他查询锁住了。
Sending data
- 正在处理
SELECT
查询的记录,同时正在把结果发送给客户端。 Sorting for group
- 正在为
GROUP BY
做排序。 Sorting for order
- 正在为
ORDER BY
做排序。 Opening tables
- 这个过程应该会很快,除非受到其他因素的干扰。例如,在执
ALTER TABLE
或LOCK TABLE
语句行完以前,数据表无法被其他线程打开。 正尝试打开一个表。 Removing duplicates
- 正在执行一个
SELECT DISTINCT
方式的查询,但是MySQL无法在前一个阶段优化掉那些重复的记录。因此,MySQL需要再次去掉重复的记录,然后把结果发送给客户端。 Reopen table
- 获得对一个表的锁,但是被通知到得到锁之后该表结构会发生变化。因此就先释放锁,关闭表,重新打开它
Repair by sorting
- 修复指令正在用排序算法创建索引。
Repair with keycache
- 修复指令正在利用索引缓存一个个地创建新索引。它会比
Repair by sorting
慢很多。 Searching rows for update
- 正在将符合条件的记录找出来以备更新。它必须在
UPDATE
要修改相关的记录之前就完成了。 Sleeping
- 正在等待客户端发送新请求.
System lock
- 正在等待取得一个外部系统锁。如果当前没有需要运行多个
mysqld
服务器同时来请求同一个表,那么可以通过增加--skip-external-locking
参数来禁止外部系统锁。 Upgrading lock
INSERT DELAYED
处理程序正在尝试取得一个锁表以插入新记录。Updating
- 正在搜索需要更新的记录,并正在更新。
User Lock
- 正在等待
GET_LOCK()
。 Waiting for tables
- 该线程得到通知,数据表结构已经被修改了,需要重新打开数据表以取得新的结构。然后,为了能的重新打开数据表,必须等到所有其他线 程关闭这个表。以下几种情况下会产生这个通知:
FLUSH TABLES tbl_name
,ALTER TABLE
,RENAME TABLE
,REPAIR TABLE
,ANALYZE TABLE
, 或OPTIMIZE TABLE
。 waiting for handler insert
INSERT DELAYED
已经处理完了所有待处理的插入操作,正在等待新的请求。
大部分状态对应很快的操作,只要有一个线程保持同一个状态好几秒钟,那么可能是有问题发生了,需要检查一下。
还有其他的状态没在上面中列出来,不过它们大部分只是在查看服务器是否产生错误了时才用得着。
14.5.3.17 SHOW STATUS
语法
SHOW STATUS [LIKE 'pattern']
SHOW STATUS
显示了各种服务器状态信息。也可以通过运行 mysqladmin extended-status
命令来得到结果。
这里有部分输出结果,某些变量和它对应的值可能跟你的系统不大一样。各种变量所代表的意义详情请看“5.2.4 Server Status Variables”。
mysql> SHOW STATUS;
+--------------------------+------------+
| Variable_name | Value |
+--------------------------+------------+
| Aborted_clients | 0 |
| Aborted_connects | 0 |
| Bytes_received | 155372598 |
| Bytes_sent | 1176560426 |
| Connections | 30023 |
| Created_tmp_disk_tables | 0 |
| Created_tmp_tables | 8340 |
| Created_tmp_files | 60 |
...
| Open_tables | 1 |
| Open_files | 2 |
| Open_streams | 0 |
| Opened_tables | 44600 |
| Questions | 2026873 |
...
| Table_locks_immediate | 1920382 |
| Table_locks_waited | 0 |
| Threads_cached | 0 |
| Threads_created | 30022 |
| Threads_connected | 1 |
| Threads_running | 1 |
| Uptime | 80380 |
+--------------------------+------------+
可以通过 LIKE
分句,就可以值显示匹配的变量及其值:
mysql> SHOW STATUS LIKE 'Key%';
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| Key_blocks_used | 14955 |
| Key_read_requests | 96854827 |
| Key_reads | 162040 |
| Key_write_requests | 7589728 |
| Key_writes | 3813196 |
+--------------------+----------+
14.5.3.18 SHOW TABLE STATUS
语法
SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']
SHOW TABLE STATUS
(在MySQL 3.23新增的)跟 SHOW TABLE
类似,它还显示每个表的许多相关信息。也可以通过运行 mysqlshow --status db_name
命令来显示同样的结果。
SHOW TABLE STATUS
返回了以下几个字段的信息:
Name
- 表名。
Engine
- 数据表的存储引擎类型,在MySQL 4.1.2以前,这个值被标志为
Type
。详情请看“15 MySQL Storage Engines and Table Types”。 Version
- 数据表的
`.frm'
文件版本号。 Row_format
- 记录存储格式(
Fixed
—固定的,Dynamic
—动态的, 或Compressed
— 压缩的)。 Rows
- 记录数。在某些存储引擎中,例如
MyISAM
和ISAM
他们存储了精确的记录数。不过其他存储引擎中,例如InnoDB
,它可能只是近似值。 Avg_row_length
- 记录的平均长度。
Data_length
- 数据文件长度。
Max_data_length
- 数据文件的最大长度。对固定格式存储记录的表来说,它是表的最大记录数。对动态存储记录的表来说,它是数据表存储的最大字节数,给 出了数据指针使用的大小。
Index_length
- 索引文件的长度。
Data_free
- 已经分配还未使用的字节数。
Auto_increment
- 下一个
AUTO_INCREMENT
的值。 Create_time
- 表的创建时间。
Update_time
- 表最后一次更新时间。
Check_time
- 表最后一次检查时间。
Collation
- 表的字符集和校正字符集(在中MySQL4.1.1新增的)。
Checksum
- 实时的校验和值(如果有的话) (在中MySQL4.1.1新增的)。
Create_options
- 额外留给
CREATE TABLE
的选项。 Comment
- 创建表时的备注(或者一些MySQL无法存取改表的相关信息)。
表注释一栏,InnoDB
类型的表会报告它所属的表剩余表空间。对一个使用共享表空间的表来说,它是指共享表空间的剩余空间。如果使用多表空间并且该表有自己的表空间,那么剩余空 间就是全部属于这个表的。
对 MEMORY
(HEAP
) (内存)表来说,Data_length
, Max_data_length
, 和 Index_length
的值接近内存实际分配结果。分配算法预留了大量内存空间以减少重复分配内存的操作。
14.5.3.19 SHOW TABLES
语法
SHOW [OPEN] TABLES [FROM db_name] [LIKE 'pattern']
SHOW TABLES
列出了给定数据库中的非临时(non-TEMPORARY
) 表。也可以通过命令 mysqlshow db_name
来列出这些表。
在MySQL 5.0.1以前,SHOW TABLES
的结果中只有一个字段显示表名。从MySQL 5.0.1开始,SHOW TABLES
还列出了数据库中的视图,还有第二个字段。第二字段的值是表的 BASE TABLE
(基表)或者视图名。
请注意,如果没有表的相应权限,那么在 SHOW TABLES
或 mysqlshow db_name
结果中就不会列出该表。
SHOW OPEN TABLES
列出了所有当前正被打开的表。详情请看“7.4.8 How MySQL Opens and Closes Tables”。 显示结果中的 Comment
字段告诉我们该表被 cached
和 in_use
的时间。从MySQL 3.23.33开始,可以使用 OPEN
关键字。
14.5.3.20 SHOW VARIABLES
语法
SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'pattern']
SHOW VARIABLES
显示了一些MySQL的系统变量值。这些信息也可以通过运行命令 mysqladmin variables
来得到。
GLOBAL
和 SESSION
可选项是从MySQL 4.0.3开始可以用的。如果是 SESSION
,就会得到每次新连接中使用的变量值。如果是
SESSION
,则得到当前连接中变量的值。如果你不加任何选选项,那么 SESSION
就是默认的。LOCAL
和 SESSION
一样。
如果变量的默认值不大合适,则可以在 mysqld
启动时通过命令行增加相关选项或者通过 SET
语句来做到。详情请看“5.2.1 mysqld
Command-Line Options”和“14.5.3.1 SET
Syntax. ”。
以下列出了部分结果,这些结果值可能与您的系统的值不一样。每个变量的值对应的意义详情请看“5.2.3 Server System Variables”。如何协调这些变量详情 请看“7.5.2 Tuning Server Parameters”。
mysql> SHOW VARIABLES;
+---------------------------------+------------------------------+
| Variable_name | Value |
+---------------------------------+------------------------------|
| back_log | 50 |
| basedir | /usr/local/mysql |
| bdb_cache_size | 8388572 |
| bdb_log_buffer_size | 32768 |
| bdb_home | /usr/local/mysql |
...
| max_connections | 100 |
| max_connect_errors | 10 |
| max_delayed_threads | 20 |
| max_error_count | 64 |
| max_heap_table_size | 16777216 |
| max_join_size | 4294967295 |
| max_relay_log_size | 0 |
| max_sort_length | 1024 |
...
| timezone | EEST |
| tmp_table_size | 33554432 |
| tmpdir | /tmp/:/mnt/hd2/tmp/ |
| version | 4.0.4-beta |
| wait_timeout | 28800 |
+---------------------------------+------------------------------+
可以使用 LIKE
分句列出匹配的变量:
mysql> SHOW VARIABLES LIKE 'have%';
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| have_bdb | YES |
| have_innodb | YES |
| have_isam | YES |
| have_raid | NO |
| have_symlink | DISABLED |
| have_openssl | YES |
| have_query_cache | YES |
+--------------------+----------+