最近做的一个应用,功能要求非常简单,就是 key/value 形式的存储,简单的 INSERT/SELECT,没有任何复杂查询,唯一的问题是量非常大,如果目前投入使用,初期的单表 insert 频率约 20Hz(次/秒,我喜欢这个单位,让我想起国内交流电是 50Hz),但我估计以后会有 500Hz+ 的峰值。目前的工作成果,额定功率 200Hz(CPU 占用 10 - 20,load avg = 2),最大功率 500Hz(这时 load avg > 20,很明显,只能暂时挺挺,应该在出现这种负载前提前拆表了)

INSERT DELAYED INTO

从数据的插入开始说起。如果可以容忍结果几秒以后再生效的,可以用 INSERT DELAYED INTO,因为在我的这个结构中不需要对同一个 key 频繁的 INSERT/SELECT,因为 SELECT 我是用 Memcached 挡住了,除非 Memcached 挂了,或者数据实在老到过期了,才会去 SELECT。而且要注意,如果 PHP 不需要关心 MySQL 操作的返回结果,应该使用 unbuffered query,简单的说,在你提交 query 后,不用等待 MySQL 有返回信息就继续执行之后的 PHP 指令,具体用法是用 mysql_unbuffered_query 代替 mysql_query,如果用的 MySQLi 类,应该使用 mysqli->query($sQuery, MYSQLI_USE_RESULT);

如果 SHOW PROCESSLIST,可以看到用户名为 DELAYED 的进程,进程数量等于 INSERT DELAYED 的表的数量,因为表级锁的存在,每个表一条以上的 DELAYED 进程是没有意义的

关于这个功能的 my.cnf 配置有三条,我定为如下值

delayed_insert_limit = 1000

delayed_insert_timeout = 300

delayed_queue_size = 5000

连接

有人说,如果报错连接数过大,你把 max_connections 调大就 OK,如果只这么说而不讲原因,完全是句废话,你调成 1M 肯定不会再报 Too many connections(但应该会报内存溢出之类的),但如果是这样 MySQL 又何必给这个参数?

我看到的一个很有用的公式

key_buffer_size + (read_buffer_size + sort_buffer_size) * max_connections

以 前只有很模糊的概念,应该设的很大,但又不能太大,具体多大合适,知道这个就明确了。innoDB 的公式比这个复杂点,一并给 出

innodb_buffer_pool_size

+ key_buffer_size

+ max_connections * ( sort_buffer_size + read_buffer_size + binlog_cache_size )

+ max_connections * 2MB

还有一个看起 来很有用的参数 back_log , 给我一种连接池的感觉,而且它确实在起作用,我不知道如果设大了会占用多少内存,但估计不会很多。

key_buffer_size

很多文章都告诉你越大越好,要为此 分配一半左右的物理内存,这么干通常不会出问题,但肯定不是最优的,甚至可以说很无理头——分多少内存应该是根据需求决定,而不是不管什么机器,都砍掉一 半内存用作 key_buffer_size ——有的时候可能是不够,还有的时候可能是浪费。

其实最关键的指标,还是看 SHOW GLOBAL STATUS 时的 Key_blocks_unused,只要还有剩余,就说明 key_buffer_size 没用满。有人说看 Key_reads 跟 Key_read_requests 的比值,至少要达到 1:100。这可以作为一个结果来衡量,但不够准确,因为在服务器刚启动的时候,大多数请求都要新建缓存,缓存命中比高不起来,需要运行稳定(几小时后) 再观察。我个人建议还是看 Key_blocks_unused

如果不花很长时间在运行中调试,给出一个简单的计算方法,把数据库填满,达 到设计时的最大值,看看这时候索引占了多大空间,然后把所有表的索引大小加起来,就是 key_buffer_size 可能达到的最大值,当然,还要留些余地,乘个 2 或 3 之类的。

这是我做测试的时候的 phpMyAdmin 截图,可以看到 key_buffer_size 被浪费了太多

OPTIMIZE TABLE

优化一下有好处,但会锁住表,是否值 得做要权衡一下。拿我现在这个表做例子,有 text 字段,700万条记录,1.5G 大小,优化时间约两分钟,优化后性能提升了 50%,同时表的大小变为 1.4G,但随着表的频繁改写,约一天后又恢复到以前的速度,因此在我看来并不值得。

Query Cache

因为每有写操作 Query Cache 都会被清空,除了极特殊的情况(大量读,少量写,但即使这样也应该是多用 memcached 才对)完全没有必要使用这个,把 query_cache_size 设为 0 关闭这个功能吧

mysql myisam/innodb高并发优化经验_MySQL MyISAM / PHP 高并发优化经验相关推荐

  1. mysql dba项目经验_MySQL数据库专家分享资深DBA经验

    数据库管理员DBA在我的印象中一直是一个比较高端的IT技术人员,比起其他的开发和网络系统管理员,DBA有时需要是名多面手.而在这一前提下,一些资深DBA的经验与建议将对DBA"菜鸟" ...

  2. MySQL出现慢日志超过2秒_MySQL慢日志功能分析及优化增强

    本文由  网易云发布. MySQL慢日志(slow log)是MySQL DBA及其他开发.运维人员需经常关注的一类信息.使用慢日志可找出执行时间较长或未走索引等SQL语句,为进行系统调优提供依据.本 ...

  3. MySQL MyISAM/InnoDB高并发优化经验

    最近做的一个应用,功能要求非常简单,就是 key/value 形式的存储,简单的 INSERT/SELECT,没有任何复杂查询,唯一的问题是量非常大,如果目前投入使用,初期的单表 insert 频率约 ...

  4. mysql性能优化的最佳20条经验_MySQL性能优化的最佳20+条经验

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...

  5. mysql引擎测试_MySQL MyISAM引擎和InnoDB引擎的性能测试

    以下的文章主要介绍的是MySQL MyISAM引擎和InnoDB引擎的性能测试,MyISAM引擎和InnoDB引擎在实际操作中是经常运用到的,以下的文章就是对MySQL MyISAM引擎和InnoDB ...

  6. mysql高并发不用事务_Mysql高并发加锁事务处理

    # Mysql高并发加锁事务处理 MySQL 使用 SELECT - FOR UPDATE 做事务写入前的确认 以MySQL 的InnoDB 为例,预设的 Tansaction isolation l ...

  7. mysql数据库优化大全_MySQL数据库优化技巧大全

    简介: MySQL数据库优化技巧大全 MySQL优化三大方向 ① 优化MySQL所在服务器内核(此优化一般由运维人员完成). ② 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进 ...

  8. 对mysql优化关注_MySQL优化看这篇就对了

    我们在面试的时候经常被问到你如何对数据库优化?动不动就分库分表,但是实际上有几个有分库分表的经验呢?下面我们将介绍优化数据库的各个阶段. 一.SQL语句优化 sql语句的优化是我们优化数据库的第一个阶 ...

  9. Mysql价格降低20%应该怎么写_mysql优化20条原则

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...

最新文章

  1. spring之继承配置
  2. 单模光电转换器怎么接_行业观察 | 硅基光电子与微电子单片集成研究进展
  3. 基础知识:数字、字符串、列表 的类型及内置方法
  4. 上证指数30年k线图_技术预判2020:上证指数要突破3500点才会“井喷”
  5. JavaScript RegExp(正则)
  6. 计算机专业c语言讲解,1计算机科学与技术专业本科C语言程序设计期末复习题1讲解.doc...
  7. koreader下载_kindle koreader
  8. Cmd Markdown
  9. Windows远程映射端口,访问服务器生成的tensorboard本地访问链接地址
  10. 管理者如何抓共性问题进行组织优化运作
  11. 北京对无人车的热情,华尔街都感受到了-1
  12. 【整理】SIMD、MMX、SSE、AVX、3D Now!、neon——指令集大全
  13. Things_androidThings入门
  14. NoSQL数据库知多少--KV存储数据库LevelDB
  15. 如何在eLance,oDesk或Guru.com等外包平台上赢得任何项目?
  16. windows下node版本管理
  17. 中台 (Middle Office)
  18. 双智机器人 珠海_格力“双智多元化”成果显著 珠洽会展示核心科技
  19. html页面怎么显示错误信息,Web浏览器显示错误页面
  20. Fusker - A NodeJS Security Framework

热门文章

  1. 前端学习(2158):webpack配置文件的分离
  2. 前端学习(936):缓动动画原理
  3. java面试题36 已知如下的命令执行 java MyTest a b c 请问哪个语句是正确的? ( )
  4. 30jquery-qrcode生成二维码
  5. Qt 给应用程序添加图标
  6. 必读的10篇关于GAN的论文
  7. Nike Air Jordan Sneakers
  8. 方法有多少个参数才算多?
  9. 探索未知种族之osg类生物---呼吸分解之更新循环一
  10. 前后端数据加密传输 RSA非对称加密