是否有理由运行使用多个数据库运行的Wordpress安装?例如,Wordpress的安装是否会变得如此庞大,或者会获得如此多的用户,以至于需要另一个数据库?我之所以问这个问题,是因为我听说过一个Wordpress安装,它声称使用两个MySQL数据库来运行,我不知道为什么需要这样做。
发布于 2022-04-14 12:11:11
@TomJNowell是对的。通常,在数据库世界中,通过服务器复制进行扩展或通过切分扩展是改进表键和查询算法之后的最后选择。维护多个副本或碎片是非常昂贵的,无论是服务器成本还是人的时间。您经常要解决一些问题,而且经常是在晚上。当你还有几个小时的时候问我是怎么知道的。
添加更好的表键和修复一些查找算法是扩展站点的第一步。下一步是添加一个持久对象缓存 (如redis)。第三步是提供一个更大的MariaDB / MySQL服务器机器,为一个大缓冲池提供足够的内存。
我已经写了几个免费的,非货币化的GPL插件,以解决键控和查找算法问题。WordPress性能团队已经意识到了这一工作;我希望它们能使我的插件很快就过时。
要进行重键化,请尝试使用MySQL速度指标WP。
您提到了许多用户性能不佳的站点。尝试使用指数WP用户的速度来解决这个问题。
核心WordPress中的数据库查询代码在处理数以万计(或更多)注册用户的站点时效率低下。它执行类似于以下(简化)示例的查询,以查找前几个“编辑器”用户。
SELECT CALC_FOUND_ROWS wp_users.ID
FROM wp_users
JOIN wp_usermeta ON wp_usermeta.user_id = wp_users.ID
AND wp_usermeta.meta_key = 'wp_capabilities'
WHERE wp_usermeta.meta_value LIKE '%"editor"%'
ORDER BY wp_users.display_name
LIMIT 20此查询包含臭名昭著的MySQL性能杀手meta_value LIKE '%something'。这是一个性能杀手,因为领先的%通配符要求MariaDB / MySQL检查每个用户的数据。在db行话中,它必须对wp_users和wp_usermeta进行全表扫描。(午饭后见。:-)
每当您在仪表板中显示用户、帖子或页面面板时,它都会执行类似的查询。
MySQL速度指标WP插件通过向wp_usermeta添加一些更容易访问的行来解决这个问题。它将示例查询更改为
SELECT wp_users.ID
FROM wp_users
JOIN wp_usermeta ON wp_usermeta.user_id = wp_users.ID
AND wp_usermeta.meta_key = 'wp_iufsr:editor'
ORDER BY wp_users.display_name
LIMIT 20该查询利用wp_usermeta上的一个键,并在几毫秒内完成,即使在有许多用户的站点上也是如此。
https://wordpress.stackexchange.com/questions/403957
复制相似问题