Fed*_*ina 6 postgresql postgresql-8.4 tcpip kill
问题:某个应用程序的用户执行一个涉及大量 sql 查询的报告。几分钟后,用户退出应用程序(或者更糟糕的是,应用程序崩溃,或者与数据库服务器的连接丢失)。然而,查询会继续执行,即使不再需要它。
所以我已经阅读了这些类型的情况以及如何处理它们,并且建议使用TCP Keepalive 配置。
问题是看起来 postgres 忽略了这个配置。我在“postgres 级别”和“操作系统级别”都降低了原始配置值,但没有运气:
我什至尝试重新加载/重新启动 postgres 但没有任何效果,查询一直运行到最后两分钟。¿是否有任何额外的步骤我遗漏了?
编辑:pg_stat_activity 的结果:
datid | datname | procpid | usesysid | usename | current_query | waiting | xact_start | query_start | backend_start | client_addr | client_port
----------+--------------------------------------------+---------+----------+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+-------------------------------+-------------------------------+-------------------------------+-------------+-------------
467061608 | libertya_prod_hts_rg1_20161004_qafuncional | 16716 | 16384 | libertya | SELECT dt.signo_issotrx, dt.name as tipodoc, i.ad_org_id, i.ad_client_id, i.documentno, i.c_invoice_id as doc_id, i.c_order_id, i.c_bpartner_id, bp.name as bpartner, i.issotrx, i.dateacct, i.dateinvoiced as datedoc, p.netdays, i.dateinvoiced + (p.netdays::text || ' days'::text)::interval AS duedate, paymenttermduedays(i.c_paymentterm_id, i.dateinvoiced::timestamp with time zone, now()) AS daysdue, i.dateinvoiced + (p.discountdays::text || ' days'::text)::interval AS discountdate, round(i.grandtotal * p.discount * 0.01::numeric, 2) AS discountamt, i.grandtotal AS grandtotalmulticurrency, invoicepaid(i.c_invoice_id, i.c_currency_id, 1) AS paidamtmulticurrency, invoiceopen(i.c_invoice_id, 0, i.c_currency_id,i.c_conversiontype_id) AS openamtmulticurrency, currencybase(i.grandtotal,i.c_currency_id,i.dateinvoiced, i.ad_client_id, i.ad_org_id) AS grandtotal, invoicepaid(i.c_invoice_id, 118, 1) AS paidamt, invoiceopen(i.c_invoice_id, 0,118,i.c_conversiontype_id) AS openamt, i.c_currency_id, i.c_conversiontype_id, i. | f | 2017-04-07 08:06:23.896404-03 | 2017-04-07 08:06:24.513244-03 | 2017-04-07 08:06:02.817331-03 | 127.0.0.1 | 59354
Run Code Online (Sandbox Code Playgroud)
第 9.6 页带来idle_in_transaction_session_timeout:
终止具有空闲时间超过指定持续时间(以毫秒为单位)的打开事务的任何会话。这允许释放该会话持有的任何锁并重用连接槽;它还允许清理仅对该事务可见的元组。有关此内容的更多详细信息,请参阅第 24.1 节。
默认值 0 禁用此功能。
可以轻松设置,
SET idle_in_transaction_session_timeout = '5min';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4009 次 |
| 最近记录: |