[返回目录](index.html)#### [高级应用与部署](gaoji_index.html "test") —— [mysql优化](gaoji_mysql_yh.html "test")
在整体的系统运行过程中,数据库服务器 MySQL 的压力是最大的,不仅占用很多的内存和 cpu 资源,而且占用着大部分的磁盘 io 资源,连 PHP 的官方都在声称,说 PHP 脚本 80% 的时间都在等待 MySQL 查询返回的结果。由此可见,提高系统的负载能力,降低 MySQL 的资源消耗迫在眉睫。
##### 常见优化方法:
###### 1、页面缓存
1、页面缓存功能是降低MySQL的资源消耗的(PHPCMS V9系统本身就已经考虑,采用生成HTML页面,大大降低了数据库的压力)。
###### 2、mysql服务器的优化
2.1、修改全站搜索,修改my.ini(my.cnf) ,在 \[mysqld\] 后面加入一行“ft\_min\_word\_len=1”,然后重启Mysql,再登录网站后台(模块管理->全站搜索)重建全文索引。
2.2、记录慢查询sql语句,修改my.ini(my.cnf),添加如下代码:
```
<pre class="brush:xml">
#log-slow-queries
long_query_time = 1 #是指执行超过多久的 sql 会被 log 下来
log-slow-queries = E:/wamp/logs/slow.log #设置把日志写在那里,可以为空,系统会给一个缺省的文件
#log-slow-queries = /var/youpath/slow.log linux下 host_name-slow.log
log-queries-not-using-indexes
```
2.3、mysql缓存的设置
```
<pre class="brush:xml">
mysql>show variables like '%query_cache%';
```
mysql本身是有对sql语句缓存的机制的,合理设置我们的mysql缓存可以降低数据库的io资源。
#query_cache_type= 查询缓存的方式(默认是 ON)
query_cache_size 如果你希望禁用查询缓存,设置 query_cache_size=0。禁用了查询缓存,将没有明显的开销
query_cache_limit 不缓存大于这个值的结果。(缺省为 1M) 2.4、查询缓存的统计信息
```
<pre class="brush:xml"> mysql> SHOW STATUS LIKE ‘qcache%’;
```
Qcache_free_blocks 缓存中相邻内存块的个数。数目大说明可能有碎片。
FLUSH QUERY CACHE 会对缓存中的碎片进行整理,从而得到一个空闲块。
Qcache_free_memory 缓存中的空闲内存。
Qcache_hits 每次查询在缓存中命中时就增大。
Qcache_inserts 每次插入一个查询时就增大。命中次数除以插入次数就是不中比率;用 1 减去这个值就是命中率。在上面这个例子中,大约有 87% 的查询都在缓存中命中。
Qcache_lowmem_prunes 缓存出现内存不足并且必须要进行清理以便为更多查询提供空间的次数。这个数字最好长时间来看;如果这个数字在不断增长,就表示可能碎片非常严重,或者内存很少。(上面的 free_blocks 和 free_memory 可以告诉您属于哪种情况)。
Qcache_not_cached 不适合进行缓存的查询的数量,通常是由于这些查询不是 SELECT 语句。
Qcache_queries_in_cache 当前缓存的查询(和响应)的数量。
Qcache_total_blocks 缓存中块的数量。通常,间隔几秒显示这些变量就可以看出区别,这可以帮助确定缓存是否正在有效地使用。运行 FLUSH STATUS 可以重置一些计数器,如果服务器已经运行了一段时间,这会非常有帮助。 2.5、my.ini(my.conf)配置
2.5.1、key\_buffer\_size
```
<pre class="brush:xml"> key_buffer_size = 256M
```
# key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。
对于内存在4GB左右的服务器该参数可设置为256M或384M。注意:该参数值设置的过大反而会是服务器整体效率降低!
2.5.2、 ```
<pre class="brush:xml">
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
sort_buffer_size = 6M
```
查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。所以,对于内存在4GB左右的服务器推荐设置为6-8M。 2.5.3、 ```
<pre class="brush:xml">read_buffer_size = 4M
```
读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享! 2.5.4、```
<pre class="brush:xml">join_buffer_size = 8M
```
联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享! 2.5.5、```
<pre class="brush:xml">
myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M
```
指定MySQL查询缓冲区的大小。可以通过在MySQL控制台执行以下命令观察: ```
<pre class="brush:xml">
# > SHOW VARIABLES LIKE '%query_cache%';
# > SHOW STATUS LIKE 'Qcache%';
# 如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况;
#如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲;
Qcache_free_blocks,如 果该值非常大,则表明缓冲区中碎片很多
```
2.5.6、 ```
<pre class="brush:xml">
tmp_table_size = 256M
max_connections = 768
```
指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提示,则需要增大该参数值。 2.5.7、```
<pre class="brush:xml">
max_connect_errors = 10000000
wait_timeout = 10
```
指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。 2.5.8、 ```
<pre class="brush:xml">thread_concurrency = 8
```
该参数取值为服务器逻辑CPU数量×2,如果服务器有2颗物理CPU,而每颗物理CPU又支持H.T超线程,所以实际取值为4 × 2 = 8 2.5.9、 ```
<pre class="brush:xml">skip-networking
```
开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!
[返回目录](index.html) 上海盛大网络发展有限公司 c 2006 - 2011 B2-20040053.
问题和建议请反馈至:http://bbs.phpcms.cn
- 首页
- 简介
- PHPCMS v9 安装环境要求
- 安装
- Linux 环境搭建推荐教程
- Windows 环境搭建推荐教程
- CentOS5下Nginx 环境推荐教程
- PC_webserver 安装说明
- PHPCMS V9 安装说明
- 使用
- 后台主界面
- 我的面板
- 修改个人信息
- 修改密码
- 生成首页
- 设置
- 相关设置
- 站点管理
- 发布点管理
- 基本设置
- 安全配置
- PHPSSO配置
- 邮箱配置
- connect
- 管理员设置
- 管理员管理
- 角色管理
- 模块
- 模块管理
- 模块管理
- 在线充值
- 短信平台
- 物流管理
- 外部数据导入
- 点评
- 表单向导
- 手机门户
- 广告
- 新闻心情
- 短消息
- 投票
- 友情链接
- 评论
- 公告
- 全站搜索
- 数据源
- 企业黄页
- 模块配置
- 分类管理
- 黄页模型管理
- 企业模板管理
- 信息管理
- 企业库管理
- 批量更新URL
- 内容
- 内容发布管理
- 管理内容
- 附件管理
- 专题
- 碎片管理
- 采集管理
- 评论管理
- 发布管理
- 批量更新栏目页
- 生成首页
- 批量更新URL
- 批量更新内容页
- 同步到发布点
- 内容相关设置
- 管理栏目
- 模型管理
- 类别管理
- 推荐位管理
- 用户
- 会员管理
- 会员管理
- 审核会员
- 会员模块配置
- 会员组管理
- 管理会员组
- 会员模型管理
- 管理会员模型
- 界面
- 模板风格
- 标签向导
- 扩展
- 附加字段管理
- 在线升级
- 信息模型设置
- 前台菜单管理
- 来源管理
- 木马查杀
- 更新全站缓存
- 后台操作日志
- 下载镜像管理
- IP禁止
- URL规则管理
- 数据库工具
- 菜单管理
- 敏感词管理
- Baibu/Google地图
- 关联链接
- 联动菜单
- 工作流
- phpsso
- 会员管理
- 应用管理
- 通信信息
- 积分兑换
- 管理员管理
- 系统设置
- 更新缓存
- 修改密码
- 应用
- 升级与转换
- 程序升级
- 离线升级
- 在线升级
- 程序转换
- phpcms2008 to v9
- phpcms2007 to v9
- DEDECMS 5.6 to v9
- 帝国cms 6.5 to v9
- PHP168 Sharp to v9
- 万能数据导入
- 整合文档
- 整合Discuz 7.0 - X1.5
- 整合Discuz X2
- 整合PHPWIND 8.7
- 标签使用
- PC标签使用说明
- PC标签保留参数
- 系统常量
- 功能模块
- 内容模块
- 评论模块
- 投票模块
- 公告模块
- 专题模块
- 会员模块
- 友情链接模块
- 黄页模块
- 工具箱
- json工具箱
- xml工具箱
- get标签
- 碎片工具箱
- 高级应用与部署
- Apache下Rewrite设置
- Sphinx全文索引教程
- Mysql开启全文索引
- Mysql优化
- 修改后台路径
- 数据库分离部署
- 万能字段应用
- 推荐位高级应用
- 主程序与web目录分离
- 第三方手册
- JQuery 手册
- artDialog 手册
- formValidator手册
- calendar手册
- CKEditor
- 二次开发
- 目录结构分析
- 数据库结构
- 二次开发流程
- 入口程序
- 系统类库与函数库调用
- 配置文件调用
- 函数扩展
- 控制器扩展技巧
- 常见问题
- 采集过滤规则无效
- 网站更换域名怎么办?
- 后台登陆提示验证码错误
- 应用间同步登陆问题
- 提示通信失败,用户登录失败
- 如何将静态文件生成到根目录
- 为什么添加的内容没有生成静态?