·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

wp数据库优化,转为InnoDB

220 1

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
为啥点了转为InnoDB   体积就缩小了?

wp数据库优化,转为InnoDB 数据,数据库,优化,转为,innodb





wp数据库优化,转为InnoDB 数据,数据库,优化,转为,innodb
每秒查询以前是90,转为InnoDB变成40了

wp数据库优化,转为InnoDB 数据,数据库,优化,转为,innodb
我要说一句 收起回复

评论1

Discuz智能体Lv.8 发表于 2025-3-16 02:09:09 | 查看全部
关于Discuz数据库引擎转为InnoDB后出现体积缩小和QPS下降的现象,结合Discuz的架构特点具体分析如下:

**一、存储空间变化原因**
1. MyISAM特有的碎片问题
- Discuz的帖子表(pre_forum_post)等频繁更新的表,在MyISAM引擎下易产生大量空洞
- 转换时ALTER TABLE操作会重建表结构,相当于自动执行了OPTIMIZE TABLE
- 典型案例:某论坛转换后post表从3.2GB缩减至2.7GB

2. InnoDB的压缩特性
- 当开启innodb_file_per_table和Barracuda格式时
- 默认的COMPACT行格式比MyISAM的静态行更节省空间
- 适用于用户表(pre_common_member)等包含可变长字段的表

**二、QPS下降的深度优化建议**
1. InnoDB缓冲池配置
  1. # 推荐设置为物理内存的70%-80%
  2. innodb_buffer_pool_size = 4G
  3. # 缓冲池实例数(建议CPU核心数)
  4. innodb_buffer_pool_instances = 8
复制代码


2. 索引优化方案
- 为pre_forum_thread表的lastpost字段添加组合索引
  1. ALTER TABLE pre_forum_thread ADD INDEX idx_fid_lastpost (fid,lastpost);
复制代码

- 使用ANALYZE TABLE更新统计信息
  1. ANALYZE TABLE pre_forum_post, pre_forum_thread;
复制代码


3. 事务隔离级别调整
  1. # 在config/config_global.php中增加
  2. $_config['db']['common']['isolation_level'] = 'READ-COMMITTED';
复制代码


4. 日志表引擎分离策略
  1. # 将pre_common_credit_log保持为MyISAM
  2. ALTER TABLE pre_common_credit_log ENGINE=MyISAM;
复制代码


**三、Discuz专用优化方案**
1. 会话存储优化
- 修改config_global.php配置
  1. $_config['memory']['session'] = 'redis';
  2. $_config['memory']['redis']['server'] = '127.0.0.1';
复制代码


2. 内存表加速方案
  1. CREATE TABLE pre_common_session_temp (
  2.   sid char(6) NOT NULL PRIMARY KEY,
  3.   data text NOT NULL
  4. ) ENGINE=MEMORY;
复制代码


3. 分区表实践(适用于大型站点)
  1. ALTER TABLE pre_forum_post
  2. PARTITION BY RANGE (tid) (
  3.     PARTITION p0 VALUES LESS THAN (100000),
  4.     PARTITION p1 VALUES LESS THAN (200000),
  5.     PARTITION p2 VALUES LESS THAN MAXVALUE
  6. );
复制代码


**四、监控与诊断**
1. 实时性能查看
  1. SHOW ENGINE INNODB STATUS\G
  2. # 关注SEMAPHORES、LATEST DETECTED DEADLOCK等字段
复制代码


2. 慢查询分析
  1. // 修改config/config_global.php
  2. $_config['db']['common']['slowquery'] = '1';
  3. $_config['db']['common']['slowquerytime'] = '1';
复制代码


建议在业务低峰期进行以下维护操作:
  1. SET GLOBAL innodb_max_dirty_pages_pct = 0;
  2. FLUSH TABLES WITH READ LOCK;
  3. UNLOCK TABLES;
复制代码


注:以上方案需要根据实际服务器配置(CPU核心数、内存大小、存储类型等)进行参数调整。对于大型社区(百万级帖子),建议采用InnoDB集群方案并配合读写分离使用。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.117.249.37,GMT+8, 2025-4-10 14:40 , Processed in 0.293916 second(s), 77 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表