标签:数据库优化
>show status;
使用 show status了解各种sql的执行频率 可搭配参数 global 全局查看,或者session当前连接开始计数 默认不加参数是指查看当前连接
show status; +-----------------------------------------------+----------------+ | Variable_name | Value | +-----------------------------------------------+----------------+ | Aborted_clients | 65 | | Aborted_connects | 589 | | Binlog_cache_disk_use | 0 | | Binlog_cache_use | 0 | | Binlog_stmt_cache_disk_use | 0 | | Binlog_stmt_cache_use | 0 | | Bytes_received | 1649 | | Bytes_sent | 11767 | | Com_admin_commands | 0 | | Com_assign_to_keycache | 0 | | Com_alter_db | 0 | | Com_alter_db_upgrade | 0 | ...
>常见的统计参数
Com_select :执行select操作的次数,一次只累加1 Com_insert:执行insert操作的次数,一次也只累加1 Com_update:执行update操作的次数 Com_delete:执行delete的次数 Innodb_rows_read select查询的返回的行数 Innodb_rows_inserted 执行INSERT操作插入的行数 Innodb_rows_updated 执行update操作更新的行数 Innodb_rows_deleted 执行deleted操作删除的行数 Connections:试图连接MYSQL服务器的次数。 Uptime 服务器工作时间。 Slow_queries 慢查询的次数。
>查看忙查询次数
mysql> show global status like ‘Slow_queries‘; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | Slow_queries | 4 | +---------------+-------+ 1 row in set (0.00 sec)
>开启慢查询日志
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间通过long_query_time值来设定,超过这个值则会被记录到慢查询日志中。long_query_time的默认值为10,默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。
1>查看是否开启忙日志查询
show variables like ‘%slow_query_log%‘;
2>开启满日志查询
1.配置文件修改 log-slow-queries = /usr/local/mysql/var/slowquery.log long_query_time = 3 #单位是秒 log-queries-not-using-indexes 2.使用sql语句修改 set global log_slow_queries = ON; set global slow_query_log = ON; set global long_query_time=0.01#单位是秒
3>慢日志格式
select * from auction1.user where user_name=‘liaoxz‘; 执行的慢查询语句 # Time: 170427 4:41:48 日志记录的时间 # User@Host: root[root] @ localhost [] 服务器用户/主机名 # Query_time: 10.007816 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 总的查询时间、锁定时间、"发送"或者返回的行数、查询过程中所检查的行数
>show profiles
profiling在mysql中默认是关闭的,在数据库会话级别可以打开,开启之后会收集在执行语句时候所使用的资源 在会话打开profilinges set profiling=1;
>使用show profiles查看执行的语句的持续时间和ID
MariaDB [auction1]> show profiles; +----------+------------+------------------------------------------------------------------------------------------------------------------+ | Query_ID | Duration | Query | +----------+------------+------------------------------------------------------------------------------------------------------------------+ | 6 | 0.00038804 | select * from orders limit 1 | | 7 | 0.00019379 | select * from orders limit 1 | | 8 | 0.00028797 | select * from user limit 1 | | 9 | 0.00006671 | select * from orders right user where orders.ID=user.id | | 10 | 0.00336970 | select orders*.user.id from where orders.ID=user.id | | 11 | 0.00005291 | select orders*,user.id from where orders.ID=user.id | | 12 | 0.00004725 | select orders*,user.id from orders,user where orders.ID=user.id | | 13 | 0.00003863 | select orders*,user.id from orders,user where orders.ID=user.id | | 14 | 0.00024284 | select * from orders limit 1 | | 15 | 0.00027788 | select * from orders limit 10 | | 16 | 0.00007312 | select * from user where user=‘liaoxz‘; select * from user where user=‘liaoxz‘ | | 17 | 0.00031860 | select * from user limit 1 | | 18 | 0.02771239 | select * from user where user_name=‘liaoxz‘ | | 19 | 0.03121868 | select * from user where user_name=‘liaoxz‘ | | 20 | 0.02219678 | select * from user where user_name=‘liaoxz‘ | +----------+------------+------------------------------------------------------------------------------------------------------------------+ 15 rows in set (0.00 sec)
>通过指定ID查询执行时的持续时间
MariaDB [auction1]> show profile for query 20; +----------------------+----------+ | Status | Duration | +----------------------+----------+ | starting | 0.000038 | | checking permissions | 0.000005 | | Opening tables | 0.000010 | | After opening tables | 0.000004 | | System lock | 0.000002 | | Table lock | 0.000002 | | After table lock | 0.000004 | | init | 0.000035 | | optimizing | 0.000011 | | statistics | 0.000013 | | preparing | 0.000008 | | executing | 0.000002 | | Sending data | 0.021981 | | end | 0.000012 | | query end | 0.000004 | | closing tables | 0.000007 | | freeing items | 0.000006 | | updating status | 0.000019 | | logging slow query | 0.000032 | | cleaning up | 0.000002 | +----------------------+----------+ 20 rows in set (0.00 sec)
>具体资源耗费查询(all,cpu,block io,context switch,page faults)
MariaDB [auction1_1]> show profile cpu for query 20; +----------------------+----------+----------+------------+ | Status | Duration | CPU_user | CPU_system | +----------------------+----------+----------+------------+ | starting | 0.000038 | 0.000000 | 0.000000 | | checking permissions | 0.000005 | 0.000000 | 0.000000 | | Opening tables | 0.000010 | 0.000000 | 0.000000 | | After opening tables | 0.000004 | 0.000000 | 0.000000 | | System lock | 0.000002 | 0.000000 | 0.000000 | | Table lock | 0.000002 | 0.000000 | 0.000000 | | After table lock | 0.000004 | 0.000000 | 0.000000 | | init | 0.000035 | 0.000000 | 0.000000 | | optimizing | 0.000011 | 0.000000 | 0.000000 | | statistics | 0.000013 | 0.000000 | 0.000000 | | preparing | 0.000008 | 0.000000 | 0.000000 | | executing | 0.000002 | 0.000000 | 0.000000 | | Sending data | 0.021981 | 0.026852 | 0.000000 | | end | 0.000012 | 0.000000 | 0.000000 | | query end | 0.000004 | 0.000000 | 0.000000 | | closing tables | 0.000007 | 0.000000 | 0.000000 | | freeing items | 0.000006 | 0.000000 | 0.000000 | | updating status | 0.000019 | 0.000000 | 0.000000 | | logging slow query | 0.000032 | 0.000000 | 0.000000 | | cleaning up | 0.000002 | 0.000000 | 0.000000 | +----------------------+----------+----------+------------+ 20 rows in set (0.00 sec)
>sql show大全
>1. show tables/show tables from database_name; -- 显示当前数据库中所有表的名称。
>2. show databases; -- 显示mysql中所有数据库的名称。
>3. show columns from table_name from database_name; 或show columns from database_name.table_name; -- 显示表中列名称。
>4. show grants for user_name; -- 显示一个用户的权限,显示结果类似于grant 命令。
>5. show index from table_name; -- 显示表的索引。
>6. show variables; -- 显示系统变量的名称和值。
>7. show processlist; -- 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。
>8. show table status; -- 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。
>9. show privileges; -- 显示服务器所支持的不同权限。
>10. show create database database_name; -- 显示create database 语句是否能够创建指定的数据库。
>11. show create table table_name; -- 显示create database 语句是否能够创建指定的数据库。
>12. show engines; -- 显示安装以后可用的存储引擎和默认引擎。
>13. show innodb status; -- 显示innoDB存储引擎的状态。
>14. show logs; -- 显示BDB存储引擎的日志。
>15. show warnings; -- 显示最后一个执行的语句所产生的错误、警告和通知。
>16. show errors; -- 只显示最后一个执行语句所产生的错误。
>17. show [storage] engines; --显示安装后的可用存储引擎和默认引擎。
>配置文件/etc/my.cnf
[client] port = 3306 socket = /tmp/mysql.sock default-character-set=utf8 [mysqld] default-time-zone = ‘+8:00‘ server-id=9527 user=mysql #bin-log日志相关优化参数 log-bin=mysql-master-bin #混合模式复制 binlog_format = mixed #存储二进制缓存 binlog_cache_size = 16M #bin-log日志保存多长时间 expire_logs_days=7 #最大连接数 max_connections=1000 #事务提交或事务外的指令把日志写入(flush)硬盘 innodb_flush_log_at_trx_commit=1 #文件系统自动识别缓存大小是否写入磁盘 sync_binlog=0 datadir = /data/mysqldb port = 3306 socket = /tmp/mysql.sock #table_cache = 5000 #缓存大小设置 query_cache_size = 256M #单个查询使用多大缓冲区 query_cache_limit = 16M #内存表大小 max_heap_table_size = 128M #线程池大小 thread_cache_size = 128 #慢查询超过多长时间写入日志 long_query_time = 3 #临时表大小 tmp_table_size = 128M #设置索引缓冲区大小 key_buffer_size = 256M #数据包大小接受设置 max_allowed_packet = 64M #索引扫描,范围索引扫描,无索引全表扫描的表连接 缓存的大小 join_buffer_size = 16M #排序 会话 的缓存大小 sort_buffer_size = 16M #顺序读表缓存 read_buffer_size = 16M #随机读缓冲区大小 read_rnd_buffer_size = 64M #缓存innodb表的索引,数据,插入数据时的缓冲 innodb_buffer_pool_size = 6G sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid #timestamp类型的列明确的注明default值 explicit_defaults_for_timestamp=true #禁止域名解析 skip-name-resolve #数据库是否支持符号链接存储,1为允许 symbolic-links=0 #数据库级的字符集,对之前数据不产生影响 character-set-server=utf8mb4 #大小写铭感 lower_case_table_names=1 服务器关闭非交互连接之前等待活动的秒数 wait_timeout=180 #闭一个交互的连接之前所要等待的秒数 interactive_timeout=180
标签:数据库优化
原文地址:http://liaoxz.blog.51cto.com/9291858/1920588