Mysql入门

来源:互联网 发布:dpp软件怎么调色 编辑:程序博客网 时间:2024/05/18 01:50

1、查看Linux内存
free -m
这里写图片描述
如上图空闲内存总共为2998M,数据库占用内存过大,考虑是否存在数据取出过多

2、cpu使用情况
top
按1可以查看cpu核数,按t可以可以看到负载排名靠前的进程,列出几个重要的参数

  • %CPU 上次更新到现在的CPU时间占用百分比
  • TIME 进程使用的CPU时间总计,单位秒
  • TIME+ 进程使用的CPU时间总计,单位1/100秒
  • %MEM 进程使用的物理内存百分比
  • VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  • SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
  • RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  • CODE 可执行代码占用的物理内存大小,单位kb

3、查看数据库连接
netstat -anp|grep 3306|grep ESTABLISHED 可以大概查看所有连接
netstat -anp|grep 3306|grep ESTABLISHED|wc -l 查看当前大概连接数目
登录数据库后可以使用:show status like “%conn%”;

4、 看msyql状况
status
Questions: 查询总次数 Slow queries: 慢查询的语句,大于long_query_time

5、查看mysql进程情况,以下是几个个强大的指令,均可接like “%%”
show processlist;
show status
show variables
在使用processlist时,注意的问题:
command列,显示当前连接的执行的命令,一般就是休眠(sleep)一般数据库连接池会有这个状态,查询(query),连接(connect)。
state很重要,可以查看官网什么意思

6、查看mysql情况,请先行配置好慢日志

  1. 登录 mysql -u root -p123456
  2. 查看慢日志情况:show variables like “%slow%”;

  3. 开启慢日志:set global slow_query_log=’ON’;
    set global log_slow_queries = ON;
    set global long_query_time=2; #设置大于2s的sql语句记录下来
    修改mysql配置文件my.conf,如下

[mysqld]
log-slow-queries = /var/logs/mysql_slow_query.log
long_query_time = 2 #单位是秒
log-queries-not-using-indexes

查看慢日志
tail -f /var/logs/mysql_slow_query.log
Query_time: 查询时间
Lock_time: 锁住时间
Rows_sent: 返回的数据行数
Rows_examined: 检查或者说查询的行数
分析工具:
mysqldumpslow
mysqlsla
myprofi
mysql-explain-slow-log
mysqllogfilter

优化:
查看执行计划:详情请查看官网
explain+sql语句
type=const表示通过索引一次就找到了
key=primary的话,表示使用了主键
type=all,表示为全表扫描;
key=null表示没用到索引
type=ref,因为这时认为是多个匹配行,在联合查询中,一般为REF。

如何进行更进一步sql语句的优化,可以参考官网

磁盘I/O瓶颈:
sudo apt-get install sysstat
使用 iostat -x 指令查看
纵向扩展可做优化:磁盘raid10或替换固态硬盘

负载横向扩展
做mysql主从、分区表、缓存(redis、mangodb等)

优化采取方式:主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发访问与负载能力

主从同步:
MySQL binlog
原理:把数据库所有更新操作存储在专用的文件里日志(除了select语句,一般情况(insert,update,delete,create ,alter,drop)),然后主库根据该文件同步其他从库

高可用:
使用一些proxy,如MySQL-Proxy、Keeplive、Haproxy等

读写分离:
1、在代码级别控制,读写操作语句分离
2、可以使用一些中间件产品:
如Cobar、mycat、oneproxy、atlas等

查询表行数与空间大小
select table_schema, table_name,(index_length+data_length)/(1024*1024) assize_mb, table_rows from information_schema.tables where table_schema not in(“mysql”, “information_schema”) order by assize_mb desc limit 10;

0 0
原创粉丝点击