在 Navicat Monitor 3 监控工具中的查询分析器画面顶部,我们设置了一个图表,用以显示等待时间最长的查询:
能够标识出滞后的查询非常重要,因为它们可以让一切陷入瘫痪。
除了在标识出慢速查询并对其进行修复外,另一种策略就是全面限制查询执行时间。在 PostgreSQL 等专业级数据库中,可以通过设置 statement_timeout 变量来限制整个数据库甚至每个用户的查询执行时间。在这篇文章中,我们将学习如何在 Navicat 16 For PostgreSQL 中运用这个重要的数据库变量。
在数据库级别设置 statement_timeout 变量
为数据库设置默认语句超时是一个很好的起点。这可确保连接到数据库的任何应用程序或人员的查询运行时间都不会超时。一个合理的默认值应是 30 秒或 60 秒,但如果你愿意,可以设置更长的时间。以下是将值设置为 60 秒的语句:
ALTER DATABASE mydatabase SET statement_timeout = '60s';
在 Navicat 16 For PostgreSQL 中,我们可以选择主菜单中的“工具”>“服务器监控”>“PostgreSQL”以查看 statement_timeout 变量。你会在“变量”选项卡找到它:
事实上,因为服务器有很多变量,你可能要使用查找工具来找出 statement_timeout 变量!你可以单击“全部高亮显示”切换按钮以更有效地找到匹配的变量。
当然,SHOW 语句也能做到:
为特定用户设置查询超时
为了更精确控制,我们可以为特定用户设置查询超时值(你要知道总是会有人选择整个数据库!)。这能使用 ALTER ROLE 语句做到,它可以设置许多数据库变量,包括 statement_timeout。
我们尝试创建一个名为“guest”的新用户角色:
现在我们可以使用 ALTER ROLE 语句来限制查询执行时间,如下所示:
ALTER ROLE guest SET statement_timeout='5min';
我们可以查询 pg_roles 表来获取关于 statement_timeout 的信息(包括它是如何设置的):
rolconfig 值是一个数组,因此我们可以使用 unnest 取消嵌套,那么一行会显示一个设置:
关于在 PostgreSQL 中设置查询超时的结语
为用户标识出滞后的查询是非常重要的,因为它们可以使你的数据库性能陷入瘫痪。为此,Navicat Monitor 3 监控工具的查询分析器画面顶部就设计出了这个费时查询图表。
另一种方法是限制查询在超时之前可以执行多久。正如在本文中提到,可以在 PostgreSQL 的数据库、会话甚至单个角色级别设置查询超时。如果你还没有设置 statement_timeout 变量,我建议你尽快设置。这只是优化数据库性能的其中一步,它有助于确保你的数据库实例保持良好状况和可用。如果你有兴趣试用 Navicat 16 for PostgreSQL ,欢迎点击 这里 下载14天免费全功能软件!
PostgreSQL 相关技术文章:
使用 Navicat Monitor 3 监控 PostgreSQL
使用 Navicat Monitor 3 跟踪 PostgreSQL 实例查询
在 Navicat Monitor 3 中查看 PostgreSQL 实例详细信息
往期回顾
- 招募 Navicat Monitor 3.0 监控工具体验官 | 好礼相送
- 保姆级教程 | Navicat 人工备份和自动备份
- Navicat 16 正式支持 OceanBase 全线数据库产品
- Navicat 16 即将支持 Redis
- 免费试用 Navicat 16
- Navicat 20年发展史 | 1999 年成立于中国香港
- SQL 语句中 WHERE 1=1 的作用
- SQL 中计算总行数的百分比
- 互动有礼活动进行中 | 奖品为价值 819 元 Navicat Premium
- 假冒网站引发多重安全风险 | 官方严正声明:切勿在非官方渠道购买或下载 Navicat 软件