优化方向:
1.不要错误的把它当做一个文件存储,诸如图片,附近之类的都房子MySQL数据库中,这样就和容易导致表空间很庞大,磁盘输入输出流的读写性能很差
2.不要把MySQL数据库当成一个计算器,在其中进行大量复杂的运算
3.不要把它当成一个全文检索的工具,单纯的吧MySQL当成一个可以处理并发事务,保证数据一致性的数据库就可以了
1.表设计
1.创建业务表时,库名,表名,字段名必须使用小写字母,采用"_"进行分割
2.表中的字段和索引数量都不易过多
3.表的存储引擎一定要选用InnoDB
4.显式的为表创建一个使用自增列INT类型的做主键,保证写入的顺序是自增的,和B+Tree叶子节点分裂的顺序一致,写入更加高效,TPS性能会更高,存储效率更高。
5.金钱,日期时间,Ipv4尽量使用int来存储
日期使用datatime进行存储,用int格式存储时间需要通过转换函数from_unixtime和unix_timestamp来实现
Ipv4使用int来存储,通过转换函数inet_aton和inet_ntoa来实现
6.text和blob这种存大量文字或者图片的大数据类型,不要和业务表放在一起
7.避免使用select *这样的全局搜索
建立索引有选择性的计算方法:
其实就是选择项的数目和全部项数目的比值,越接近1,越适合创建索引
8.所有字段定义,默认加上not null约束
9.索引字段上面不要使用函数
10.找到影响业务的慢查询SQL语句:一般通过pt-query-digest来捕获
11.也可以通过show profile for query 1 查看简历索引语句的资源消耗情况(一般会记录消耗时间)
2.Linux操作系统
1.I/O调度问题,选择deadline模式,不选择cfq模式
2.文件系统一般用xfs
3.内核参数vm.swappiness它表示swap的使用意向(参数取值在1-10的范围内)默认值是60:
设置值较高的时候:内部快用尽的时候倾向于swap
设置值较低的时候:意味着不倾向于使用swap,直接释放内存中的数据
注意不要设置为0,这样会导致系统内存溢出的情况发生
###4.vm.dirty_background_ratio:指定当文件系统缓存脏页数量达到系统内存的百分比例多少时,就会触发后台回写进程运行(取值不要超过10)
###5.vm.darty_ratio:指定当文件系统缓存脏页数量达到系统内存百分比例多少时,系统不得不开始处理缓存脏页(一般设置为15,不要超过20)
3.MySQL数据库
1.配置参数优化:
innodb_buffer_pool_size:设置为物理内存的80%
innodb_max_dirty_pages_pct:脏页占innodb buffer pool的比例:25%
innodb_data_file_path=ibata1:1G:autoextend:从默认10MB调整到1GB,高并发的情况下,数据库收到影响
interactive_timeout交互式等待时间;wait_timeout非交互式等待时间,两个参数设置的值要一致:调整到400S(默认值是8小时)
gerenal log全量日志 ----->建议关闭,否则日志文件会越来越大,造成磁盘的紧张,MySQL性能也会下降