具有负载平衡的 Pgpool 主从复制 - 准备语句 "S_380" 不存在
Pgpool master-slave replication with load balancing - prepared statement "S_380" does not exist
我们正在使用 pgpool 到 运行 2 个主从模式的 postgresql 服务器,负载平衡。
有时(它不一致,其他时候它工作正常),我在应用程序日志中看到这个异常 -
09-10-17 01:35:01:627 - {ERROR} util.JDBCExceptionReporter
Thread[https-jsse-nio-8443-exec-3]; ERROR: cannot execute UPDATE in a read-only transaction
这是围绕着对应用服务器调用的write psql函数的调用。没有看到其他写语句有任何问题,只有这个。
不知道是不是pgpool的问题。
我找到了原因,这是用于更新数据库的 psql 函数,此类函数应该包含在 pgpool 配置的 black_function_list 中。
你需要告诉 Pgpool-II 在 SELECT 语句中写函数的用法。
原因是在主从模式下启用负载均衡时,Pgpool将写入查询发送到MASTER数据库并负载均衡读取查询。更具体地说,DELETE、INSERT、UPDATE 等语句被路由到 Master,而 SELECT 得到负载平衡。现在的问题是,当 SELECT 语句使用写函数时,Pgpool 仍然认为该语句是只读的并对其进行负载平衡。因为它没有函数定义的可见性。
所以简而言之,Pgpool-II 需要知道 SELECT 语句中函数的用法,这些语句可以写入数据库以确保这样的 SELECT 不应该被负载平衡。
为此你有两个选择。
使用 Pgpool 的 black_function_list 或 whitle_function_list
配置。
http://www.pgpool.net/docs/latest/en/html/runtime-config-load-balancing.html
对包含 write 的查询使用 /*NO LOAD BALANCE*/
前缀
功能。
/*NO LOAD BALANCE*/ SELECT my_writing_function();
但后者需要修改现有应用程序的 SQL 语句,这使得它不是一个非常可行的选择。
将写入函数名称列表添加到 pgpool 配置中的 black_function_list 参数。
我们正在使用 pgpool 到 运行 2 个主从模式的 postgresql 服务器,负载平衡。
有时(它不一致,其他时候它工作正常),我在应用程序日志中看到这个异常 -
09-10-17 01:35:01:627 - {ERROR} util.JDBCExceptionReporter Thread[https-jsse-nio-8443-exec-3]; ERROR: cannot execute UPDATE in a read-only transaction
这是围绕着对应用服务器调用的write psql函数的调用。没有看到其他写语句有任何问题,只有这个。
不知道是不是pgpool的问题。
我找到了原因,这是用于更新数据库的 psql 函数,此类函数应该包含在 pgpool 配置的 black_function_list 中。
你需要告诉 Pgpool-II 在 SELECT 语句中写函数的用法。
原因是在主从模式下启用负载均衡时,Pgpool将写入查询发送到MASTER数据库并负载均衡读取查询。更具体地说,DELETE、INSERT、UPDATE 等语句被路由到 Master,而 SELECT 得到负载平衡。现在的问题是,当 SELECT 语句使用写函数时,Pgpool 仍然认为该语句是只读的并对其进行负载平衡。因为它没有函数定义的可见性。 所以简而言之,Pgpool-II 需要知道 SELECT 语句中函数的用法,这些语句可以写入数据库以确保这样的 SELECT 不应该被负载平衡。
为此你有两个选择。
使用 Pgpool 的 black_function_list 或 whitle_function_list 配置。 http://www.pgpool.net/docs/latest/en/html/runtime-config-load-balancing.html
对包含 write 的查询使用
/*NO LOAD BALANCE*/
前缀 功能。
/*NO LOAD BALANCE*/ SELECT my_writing_function();
但后者需要修改现有应用程序的 SQL 语句,这使得它不是一个非常可行的选择。
将写入函数名称列表添加到 pgpool 配置中的 black_function_list 参数。