少量数据大并发的mysql优化
除去用ramdisk redis 内存表等方法,比较靠谱的方案 还是 仔细优化mysql
- 手动缓存mysql 查询 query_cache_type有3个值 0代表关闭查询缓存OFF,1代表开启ON,2(DEMAND)代表当sql语句中有SQL_CACHE关键词时才缓存 建议用 2
select SQL_CACHE user_name from users where user_id = ‘100’;
query_cache_size = 64M ,不宜设置过大,否则在数据更新的时候,会有较大的性能开支用于标注失效。 - 每个表 创建一个 InnoDB FILE: innodb_file_per_table=1 ,为了防止 ibdata1 过大失控
- ibdata1 想要瘦身,最好的办法,还是重建表,即为,复制表>删除原表>新表改名
- innodb_buffer_pool_size 最好和目标数据库内容差不多大,这样 就可以完全从内存中读取数据
另外innodb_buffer_pool_size 在mysql启动的时候,里面没有数据的,需要查询一下常用记录以便预热,在整库备份之前,最好也预热一下,以免占用太多时间。如果数据较少,这步骤也可以忽略。 - 修改硬盘写入频率:innodb_flush_log_at_trx_commit,默认1代表实时写入,0 是1秒一次 2也是1秒一次。
修改0 就好。当然非正常关闭的情况下有概率会丢失1秒的数据 - 打开慢查询日志,记录查询超过1秒的数据【生产服务器,注意硬盘】
long_query_time=1
log-slow-queries=/var/log/mysql/log-slow-queries.log - 关闭服务器端 SWAP
- 所有查询 最后还是要 LIMIT