mysql myisam/innodb高并发优化经验_MySQL MyISAM / PHP 高并发优化经验

最近做的一个应用,功能要求非常简单,就是 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 关闭这个功能吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SharePoint Framework 构建你的第一个web部件(三)

博客地址:http://blog.csdn.net/FoxDave本篇接上一讲,我们一起来看一下如何部署和测试本地开发的web部件。在SharePoint中预览web部件SharePoint工作台在SharePoint中被承载,用来在开发环境预览和测试本地web部件。它…

execCommand全集

JavaScript中的execCommand介绍 execCommand方法是执行一个对当前文档,当前选择或者给出范围的命令。处理Html数据时常用如下格式:document.execCommand(sCommand[,交互方式, 动态参数]) ,其中:sCommand为指令参数(如…

mysql my.ini位置错误_解决mysql导入数据量很大导致失败及查找my.ini 位置(my.ini)在哪...

数据库数据量很大的数据库导入到本地时,会等很久,然而等很久之后还是显示失败;这是就要看看自己本地的没mysql是否设置了超时等待,如果报相关time_out这些,可以把mysql.ini尾部添加max_allowed_packet、interactive_ti…

poj3186 Treats for the Cows(区间)

题目链接:http://poj.org/problem?id3186 题意:第一个数是N,接下来N个数,每次只能从队列的首或者尾取出元素。 ans每次取出的值*出列的序号。求ans的最大值。 样例 : input:5 1 2 1 5 2 output&#xff1a…

php5.2.5 mysql_IIS6 下安裝 PHP5.2.5 和 MySQL5.0 及概念澄清

假設 PHP 文件夾位於 D:/php_forIIS。1,php.ini 一定要拷貝到 Windows 文件夾下(重要且必須)。而 PHP4.x 版本可以不用這么做。在 Windows2003 Apache2.2 PHP5.x 下,也不用這么做。注意 extension 的加載配置:extension_dir "D:/php_…

OpenCV人脸检测并把图片写成avi视频

读出某一个文件夹下“jpg”后缀的全部图片后,用的OpenCV自带的人脸检测检测图片中的人脸,调整图片的大小写成一个avi视频。 主要是要记录一下CvVideoWriter的用法和如何从文件夹中读取某一后缀的全部文件。 代码: #include "stdafx.h&qu…

TextArea换行 滚动条

换行"\r\n" 滚动条自动滚动到结尾document.form1.text_information.doScroll(down); 滚动条顶部坐标document.form1.text_information.scrollTop; textarea自动滚动到结尾function add_information(info)//添加信息{ document.form1.text_information.valuedocument.…

leetcode83,删除有序链表中的重复元素

Given a sorted linked list, delete all duplicates such that each element appear only once. For example, Given 1->1->2, return 1->2. Given 1->1->2->3->3, return 1->2->3. 难点就一个,就是要考虑到连续3个和3个以上的情况。 …

javascript各种事件

事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcElement.releaseCapture(); 事件按键 event.keyCode event.shiftKey event.altKey event.ctrlKey 事件返回值 event.returnValue 鼠标位置 event.x event.y 窗…

mysql limit asc_MySql sql优化之order by desc/asc limit M-阿里云开发者社区

Order by desc/asc limit M是我在mysql sql优化中经常遇到的一种场景,其优化原理也非常的简单,就是利用索引的有序性,优化器沿着索引的顺序扫描,在扫描到符合条件的M行数据后,停止扫描;看起来非常的简单&am…

Spring 4 官方文档学习(十)数据访问之JDBC

说明:未修订版,阅读起来极度困难 1、Spring框架JDBC的介绍 Spring JDBC - who does what? 动作Spring你定义连接参数 是打开连接是 指定SQL语句 是声明参数,提供参数值 是准备、执行语句是 迭代结果(如果有)是 操作每…

fopen -- 打开文件或者 URL

fopen (PHP 3, PHP 4, PHP 5) fopen -- 打开文件或者 URL 说明 resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] ) fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 "scheme://..." 的格式&am…

mysql 性能状态_MySQL获取系统性能和状态_MySQL

bitsCN.comMySQL获取系统性能和状态#!/bin/ksh INTERVAL5 PREFIX$INTERVAL-sec-status touch /tmp/running RUNFILE/tmp/running my -e show global variables >> mysql-variables while test -e $RUNFILE; do file$(date %F_%I) sleep$(date %s.%N | awk "{print $…

洛谷P3392 涂国旗

P3392 涂国旗 107通过507提交题目提供者kkksc03标签难度普及-提交 讨论 题解 最新讨论 直接读字符会waWA?--为什么不对。。。跪求找错快点给钱这不就是荷兰国旗问题吗题目描述 某国法律规定,只要一个由N*M个小方块组成的旗帜符合如下规则,就是合法的…

php小问题

///PHP显示错误;display_errors Offdisplay_errors on ///PHP截取字符串$str1234567890;怎么从左边第二位截取到右边数第二位?取其中间。 $str 1234567890;print substr($str, 1, strlen($str)-2); ///php获取时间date("Y年m月d日"); 2008年4月6日date…

mysql5.7.11 创建用户_修改更新查找MySQL5.7.x的root用户的默认密码

最近新安装了wamp3.0.4里面附带的mysql已经升级到了5.7版本了。MySQL5.7在性能方面有很大的提升。安装成功之后默认root的密码为空能登录。但是正常情况下需要给root重新设置新的密码。对于MySQL5.7版本来说和之前的5.6及以下版本的user表不一样了(user表里面没有了password这个…

协方差

协方差一般用来研究诸多实验中各个变量之间的关系。举个例子来说,有n个实验,每个实验得到两个数据,分别为变量x1和变量x2。设n 7。这七组实验得到的数据分别为: (3,5), (4,5.5),(2,4),(6,7),(8,10),(2,5),(5,7.5) 用MATLAB…

预定义变量$_SERVER

PHP的getenv函数的参数列表$_SERVER["HTTP_X_FORWARDED_FOR"] 以阻止普通的匿名代理 $spager$_SERVER["SERVER_NAME"]; or$spagergetenv(SERVER_NAME); “PHP_SELF”当前正在执行脚本的文件名,与 document root 相关。举例来说…

mysql教程为什么很多都用dos_在dos操作mysql基础教程详解

第一招、mysql服务的启动和停止net stop mysqlnet start mysql第二招、登陆mysql语法如下: mysql -u用户名 -p用户密码键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql的…

今天刚开通博客,很开心

今天刚开通博客,很开心,我是一名大三的一名学生,机电专业的,下个月都要出去实习,很忐忑,也对外面的世界充满这憧憬.....明天继续,今天太晚了。转载于:https://www.cnblogs.com/namei/p/6002480.…