Bootstrap

mysql 常用语句

1、mysql查看正在执行的sql语句
    查看启用日志是否开启 :SHOW VARIABLES LIKE "general_log%";
    -- 1、设置
    -- SET GLOBAL log_output = 'TABLE';  SET GLOBAL general_log = 'ON';
    -- SET GLOBAL log_output = 'TABLE';  SET GLOBAL general_log = 'OFF';
    -- 2、查询
    SELECT * from mysql.general_log ORDER BY    event_time DESC;
    -- 3、清空表(delete对于这个表,不允许使用,只能用truncate)
2、mysql查询正在执行的进程
    查看mysql进程有两种方法(如果有SUPER权限,则可以看到全部的线程,否则,只能看到自己发起的线程(
                这是指,当前对应的MySQL帐户运行的线程)。)
    --1.进入mysql/bin目录下输入mysqladmin processlist;
    --2.启动mysql,输入show processlist;
    第一列 id,不用说了吧,一个标识,你要kill一个语句的时候很有用。
    第二列 user列,显示单前用户,如果不是root,这个命令就只显示你权限范围内的sql语句。
    第三列 host列,显示这个语句是从哪个ip的哪个端口上发出的。可以用来追踪出问题语句的用户。
    第四列 db列,显示这个进程目前连接的是哪个数据库。
    第五列 command列,显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接(connect)。
    第六列 time列,此这个状态持续的时间,单位是秒。
    第七列 state列,显示使用当前连接的sql语句的状态,很重要的列,后续会有所有的状态的描述,请注意,state只是语句执行中的某一个状态,
        一个sql语句,已查询为例,可能需要经过copying to tmp table,Sorting result,Sending data等状态才可以完成。
    第八列 info列,显示这个sql语句,因为长度有限,所以长的sql语句就显示不全,但是一个判断问题语句的重要依据。
    
    解除正在死锁的状态有两种方法:
        第一种:
            1.查询是否锁表
            show OPEN TABLES where In_use > 0;
            2.查询进程(如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程)
            show processlist
            3.杀死进程id(就是上面命令的id列)
            kill id
        第二种:
            1.查看下在锁的事务 
            SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
            2.杀死进程id(就是上面命令的trx_mysql_thread_id列)
            kill 线程ID
            例子:
            查出死锁进程:SHOW PROCESSLIST
            杀掉进程          KILL 420821;
        其它关于查看死锁的命令:
            1:查看当前的事务
            SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
            2:查看当前锁定的事务
            SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
            3:查看当前等锁的事务
            SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
3、查询表的信息定义
    show table status like 'order1' ;
    --Engin:表的存储引擎类型
    --Row_format:行的格式。对于MyISAM表,可选的值为Dynamic、Fixed或者Compressed。
                Dynamic的行长度是可变的,一般包含可变长度的字段,如VARCHAR或BLOB.
                Fixed的行长度是固定的,只包含固定长度的列,如CHAR和INTEGER.
                Compressed的行则只在压缩表中存在。
    --Rows:表中的行数。对于MyISAM和其他一些存储引擎,该值是精准的,但对于InnoDB,该值是估计值。
    --Avg_row_length:平均每行包含的字节数。
    --Data_length:表数据的大小(字节为单位)
    --Max_data_length:表数据的最大容量,该值和存储引擎有关
    --Index_length:索引的大小(字节为单位)
    --Date_free:对于MyISAM表,表示已分配但目前m没有使用的空间,这部分空间包括了之前删除的行,以及后续可以被INSERT利用到的空间。
    --Auto_increment:下一个AUTO_INCREMENT的值
    --Collation:表的默认字符集和字符列排序规则
    --Checksum:如果启用,保存的是整个表的实验检验和。
    --Comment:该列包含了一些其他的额外信息,对于MyISAM表,保存的是表在创建时带的注释。对于InnoDB表,则保存的是InnoDB表空间剩余空间信息。
                如果是一个视图,则该列包含“VIEW”的文本字样。
4、在MyISAM的存储引擎中,可以手动执行检查和修复操作
    --通过CHECK TABLE mytable检查表的错误
    --通过REPAIR TABLE mytable进行表的修复
5、转换表的引擎的几种方法
    --alter table mytable ENGIN = InnoDB;适用任何存储引擎,需要很长的时间,会按行从原表复制到一张新的表,在复制期间可能会消耗系统所有的I/O,同时会在原表上加读锁。
    --导出与导入:使用mysqldump工具将数据导出到文件,然后修改文件中的CREATE TABLE语句的存储引擎选项,注意同时修改表名,因为同一个数据库中不能存在相同的表名,即使
                  使用的是不同的存储引擎。同时注意mmysqldump默认会自动在CREATE TABLE语句前加上DROP TABLE语句,不注意这点可能导致数据丢失
    --创建一个存储引擎的表,利用insert...select...语法来导入数据
        create table innodb_table like myisam_table
        alter table innodb_table engin=InnoDB
        insert into innodb_table select * from myisam_table
6、基准指标
    --吞吐量:指单位时间n内的事务处理数
    --响应时间或者延迟:用于测试任务所需的整体时间,使用百分比响应时间来替代最大响应时间
    --并发性:Web服务器的并发性更准确的度量指标是在任意时间有多少同时发生的并发请求
    --可扩展性:给系统增加一倍的工作,在理想情况下j就能获得两倍的结果(即吞吐量增加一倍),当然,给系统增加一倍的资源(比如两倍的CPU数)就可以获得两倍的吞吐量。
    集成式测试工具:
        --ab是apache http 服务器基准测试工具,每秒最多可以处理多少请求
        --http_load:类似于ab
        --jmeter:
    单组件式测试工具:
        --mysqlslap:可以模拟服务器的负载,并输出计时信息
        --MySQL Benchmark Suit:主要用于测试服务器执行查询的速度
        --Super Smack:一款用于msql和postgreSQL的基准测试工具,可提供压力测试h和负载生成,模拟多用户访问,也可以加载测试数据到数据库,支持使用随机数据填充测试表。
        --Database Test Suit:类似m某些工业标准测试的测试工具集。
        --sysbench:多线程系统压测工具,全能测试工具,用来测试文件IO、操作系统调度器、内存分配和传输速度、POSIX线程,以及数据库服务器等。支持Luaji脚本语言。支持
                    MYSQL、操作系统和硬件测试。
7、加快ALTER TABLE 操作的速度
    --主备切换:先在一台不提供服务的机器上执行ALTER TABLE 操作,然后和提供服务的主库进行切换。
    --影子拷贝:用要求的表结构创建一张和源表无关的新表,然后通过重命名和删表操作交换两张表。
8、禁用索引、开启索引
    --ALTER TABLE test.load_data DISABLE KEYS;
    --ALTER TABLE test.load_data ENABLE KEYS;

9、查看以及设置MySQL的事务级别
    SELECT @@tx_isolation
         1)read uncommitted : 读取尚未提交的数据 :哪个问题都不能解决
        2)read committed:读取已经提交的数据 :可以解决脏读 ---- oracle默认的
        3)repeatable read:重读读取:可以解决脏读 和 不可重复读 ---mysql默认的
        4)serializable:串行化:可以解决 脏读 不可重复读 和 虚读---相当于锁表
    设置mysql的隔离级别:set session transaction isolation level 设置事务隔离级别
    
10、Mysql 查看连接数,状态 最大并发数(赞)
 -- show variables like '%max_connections%'; 查看最大连接数
    set global max_connections=1000 重新设置
    mysql> show status like 'Threads%';
    +-------------------+-------+
    | Variable_name     | Value |
    +-------------------+-------+
    | Threads_cached    | 58    |
    | Threads_connected | 57    |   ###这个数值指的是打开的连接数
    | Threads_created   | 3676  |
    | Threads_running   | 4     |   ###这个数值指的是激活的连接数,这个数值一般远低于connected数值
    
11、查看mysql的binlog日志
    show VARIABLES like 'log_bin%'                     ------日志位置
    show master status                                    ------当前的binlog文件
    show binlog events in 'mysql-bin.00000032'        -----查看binlog的日志内容,执行的sql语句
    show binlog events                                -----查看binlong日志文件
    purge binary logs to 'binlog日志文件'            -----清除binlog日志文件

12、mysql 优化语句:
show global status like '%Innodb_buffer_pool_wait_free%';
  show global status like 'innodb_log_file_size%';
    show variables like '%sync_binlog%';
 show global variables like 'innodb%';
 show global variables like 'innodb_buffer%' ;
 # 可以根据CPU核数来更改相应的参数值了,默认是4
 show global variables like 'innodb_read_io_threads';
 show global variables like 'innodb_write_io_threads';
 show variables like '%innodb_flush_log%';
  
 show global variables like '%bulk_insert_buffer_size%';
 show global variables like 'innodb-purge-thread%';
 show global variables like 'innodb_io_capacity';
 show global variables like 'innodb_io_capacity_max';
 show global variables like 'Max_allowed_packet';
 show global variables like 'Net_buffer_length';
 innodb_log_file_size
 show variables like 'innodb_%io%threads';
 show engine innodb status\G;

SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait_timeout';锁超时时间

# 查询全局等待事务锁超时时间
SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait_timeout';

# 设置全局等待事务锁超时时间
SET  GLOBAL innodb_lock_wait_timeout=100;


# 查询当前会话等待事务锁超时时间
SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';

innodb_trx ## 当前运行的所有事务
innodb_locks ## 当前出现的锁
innodb_lock_waits ## 锁等待的对应关系

show full processlist;

select * from information_schema.INNODB_TRX;
select * from information_schema.INNODB_LOCKS;
select * from information_schema.innodb_lock_waits;

-- 查看被锁的具体数据是哪行
select * from performance_schema.metadata_locks;

下面看下各个表的简介:

desc innodb_locks;
+-------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+-------+
| lock_id | varchar(81) | NO | | | |#锁ID
| lock_trx_id | varchar(18) | NO | | | |#拥有锁的事务ID
| lock_mode | varchar(32) | NO | | | |#锁模式
| lock_type | varchar(32) | NO | | | |#锁类型
| lock_table | varchar(1024) | NO | | | |#被锁的表
| lock_index | varchar(1024) | YES | | NULL | |#被锁的索引
| lock_space | bigint(21) unsigned | YES | | NULL ||#被锁的表空间号
| lock_page | bigint(21) unsigned | YES | | NULL ||#被锁的页号
| lock_rec | bigint(21) unsigned | YES | | NULL ||#被锁的记录号
| lock_data | varchar(8192) | YES | | NULL | |#被锁的数据

desc innodb_lock_waits;
+-------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+-------------+------+-----+---------+-------+
| requesting_trx_id | varchar(18) | NO | | | |#请求锁的事务ID
| requested_lock_id | varchar(81) | NO | | | |#请求锁的锁ID
| blocking_trx_id | varchar(18) | NO | | | |#当前拥有锁的事务ID
| blocking_lock_id | varchar(81) | NO | | | |#当前拥有锁的锁ID

desc innodb_trx ;
+----------------------------+---------------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------------------+---------------------+------+-----+---------------------+-------+
| trx_id | varchar(18) | NO | | | |#事务ID
| trx_state | varchar(13) | NO | | | |#事务状态:
| trx_started | datetime | NO | | 0000-00-00 00:00:00 ||#事务开始时间;
| trx_requested_lock_id | varchar(81) | YES | | NULL ||#innodb_locks.lock_id
| trx_wait_started | datetime | YES | | NULL ||#事务开始等待的时间
| trx_weight | bigint(21) unsigned | NO | | 0 | |#
| trx_mysql_thread_id | bigint(21) unsigned | NO | | 0 ||#事务线程ID
| trx_query | varchar(1024) | YES | | NULL | |#具体SQL语句
| trx_operation_state | varchar(64) | YES | | NULL ||#事务当前操作状态
| trx_tables_in_use | bigint(21) unsigned | NO | | 0 ||#事务中有多少个表被使用
| trx_tables_locked | bigint(21) unsigned | NO | | 0 ||#事务拥有多少个锁
| trx_lock_structs | bigint(21) unsigned | NO | | 0 | |#
| trx_lock_memory_bytes | bigint(21) unsigned | NO | | 0 ||#事务锁住的内存大小(B)
| trx_rows_locked | bigint(21) unsigned | NO | | 0 ||#事务锁住的行数
| trx_rows_modified | bigint(21) unsigned | NO | | 0 ||#事务更改的行数
| trx_concurrency_tickets | bigint(21) unsigned | NO | | 0 ||#事务并发票数
| trx_isolation_level | varchar(16) | NO | | | |#事务隔离级别
| trx_unique_checks | int(1) | NO | | 0 | |#是否唯一性检查
| trx_foreign_key_checks | int(1) | NO | | 0 | |#是否外键检查
| trx_last_foreign_key_error | varchar(256) | YES | | NULL ||#最后的外键错误
| trx_adaptive_hash_latched | int(1) | NO | | 0 | |#
| trx_adaptive_hash_timeout | bigint(21) unsigned | NO | | 0 ||#

 

;