你没有提到HyperDB版本,所以我假设trunk为337290。
HyperDB的SRTM功能(向主机发送读取)有两种工作方式。首先,它跟踪哪些表在当前脚本期间收到了写操作,并将这些表的所有后续读取发送给主机。其次,它为您提供了一种将所有读取内容强制提交给master的方法。
在第一种情况下,在写入同一个表后,读操作仍有可能命中从机。如果读取是一个联接查询或另一种查询,它可以将表名放在远离查询开头的地方,那么它可能会漏掉。如果可以检查不正确地发送到从属服务器的查询,请查看是否存在这种情况。如果是,请尝试增加substr
此处长度:
if ( preg_match($pattern, substr($query, 0, 1000)) )
重要的是要了解SRTM功能仅在一个脚本期间保持跟踪。因此,如果您编写一条记录(在第一个脚本中),然后重定向(现在在第二个脚本中),然后尝试从数据库中读取该记录,那么您可能正在从第二个脚本的从属脚本读取该记录。
最后,让我谈谈is_admin()
主意这是一个好主意,简单有效。在db配置文件中添加如下内容:
if ( is_admin() )
$wpdb->send_reads_to_masters();