数据库架构合理性:
1.一主多从,读写分离,有可能数据不一致
2.双机备份(keepAlive)
主从同步原理:
1.master蒋改变记录到二进制日志文件中
2.slave蒋maste的binary log events拷贝到他的中继日志(relay log)
3.slave重做中继日志中的事件,将改变反映他自己的数据
数据库拆分:水平,垂直,业务
数据库性能指标:
1.qps(show global status like ‘Question%’)
2.tps=(Com_commit+Com_rollback)/运行时间(show global status like ‘Com_commit’,show global status like “Com_rollback”)
3.线程连接数:查看最大线程数: show global status like “Max_used_connections”
查看连接线程数:show global status like "Threads%"
4.Query Cache(查询缓存用于缓存select查询结果)
启动缓存:
1.修改my.cnf
2.将query_cache_size设置具体大小,具体大小是多少取决于查询的实际情况,
但最好设1024的倍数,参考32M
3.增加一行:query_cache_type=0/1 /2
如果设置为1,将会缓存所有的结果,除非你的select语句使用SQL_NO_CACHE禁用了查询缓存
如果设置为2,则只缓存在select语句中通过SQL_CACHE指定需要的缓存查询
5.查看缓存命中率:show status like ‘Qcache%’
6.查看锁定状态:show global status like '%lock';
Table_locks_waited/Table_locks_immediate值越大代表表锁造成
的阻塞越严
Innodb_row_lock_waits innodb行锁,太大肯是间隙时间造成
7.查看主从延时:show slave status
8.Mysql慢查询开启:1.编辑/etc/my.cnf,在mysqld域总添加
2.开启慢查询:slow_query_log=1
3.慢查询日志路径:slow_query_log_file=/
4.慢查询时长:long_query_time=1
5.未使用索引的查询:log_queries_not_using_indexes=1
慢查询日志分析:使用mysqldumpslow
mysqldumpslow -s 按照何种方式排序
c:访问计数多
l:锁定时间多
r:返回记录多
t:查询时间多
all:平均锁定时间
ar:平均返回记录数
-t 返回前多少条
-g 后边可以写一个正则匹配
eg:
按照时间排序返回前10条含有左连接的查询语句
mysqldumpslow -s t -t 10 -g "left join" slow.log
explain查询(type关键字:system,const,eq_ref,index_merge,index,ALL)
全文索引优先级高
1.使用短索引
2.数据类
存储引擎:
MYISAN:1.读的性能比InnoDb高,索引和数据分开,使用压缩,从而提高了内存使用瑞
2.不支持事务,写入数据直接锁表(只有全表锁)
InnoDB:1.支持事务,支持外键,支持行级锁
2.不支持fulltext索引,行级锁并不绝对,当不确定扫描范围,锁全表
索引和数据是紧密捆绑,没有使用压缩导致体积庞大
数据库监控:orzdba,天兔LEPUS