优化方向:

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.textblob这种存大量文字或者图片的大数据类型,不要和业务表放在一起

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性能也会下降

4.硬件设备

1.磁盘的I/O,提升性能可以使用SSD的高速磁盘

2.数据库系统TPS过高,要配置阵列卡,阵列卡要配置cache模块

3.CPU使用最大性能模式

4.内存方面选择最大性能模式