技术干货 | ​Navicat 面向 PostgreSQL 查询超时的工具解决方案

news/2024/10/20 21:02:15/

早前,我们发表过一篇《PostgreSQL 与 Navicat :数据库的中坚力量》 ,从产品的发展介绍了两者的渊源与共性,获得了许多童鞋的认可。而随着PostgreSQL 在国内热度愈发高涨,应用也愈发广泛。近期,我们收到许多用户的问询,涉及一些使用时的技术问题,例如:PostgreSQL 查询延时的优化方法等。今天,小编就带大家解析如何通过 Navicat 工具便捷地跟踪、设置查询超时语句时长和设置权限来确保你的 PostgreSQL 数据库实例保持良好状况和可用性,并保障数据库系统的性能稳定。

查询超时的必要性

查询超时指在执行数据库查询操作时,如果在一定时间内无法完成查询,则会自动终止查询操作并返回错误结果。其目的是为了保护数据库系统的稳定性和性能,并避免查询操作耗尽系统资源。它是数据库系统稳定性和性能的保障措施之一。如果没有设置查询超时,当一个查询操作耗费过多的时间时,系统资源就会不足,影响其他操作和整个系统的运行。因此,设置查询超时时间具有非常重要的必要性。

应用场景

1. 并发操作较多:在高并发的情况下,如果一些查询耗时过长,则可能会影响其他查询的执行效率,进而影响整个系统的响应速度。

2. 大数据量查询:如果查询数据量过大,会消耗大量的系统资源,可能会导致系统崩溃,因此需要设置查询超时时间,防止查询过长时间执行。

3. 防止恶意攻击:对于一些恶意的SQL注入攻击,我们可以设置查询超时时间来防止攻击者通过无限循环查询来耗尽系统资源。

查询分析器 | Navicat Monitor

在 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 语句,也可以在 Navicat 轻松实现:

为特定用户设置查询超时

为了更精确地控制,我们可以为特定用户设置查询超时值(总是会有人选择整个数据库...)。这能使用 ALTER ROLE 语句做到,它可以设置许多数据库变量,包括 statement_timeout。

我们尝试创建一个名为“guest”的新用户角色:

现在我们可以使用 ALTER ROLE 语句来限制查询执行时间,如下所示:

ALTER ROLE guest SET statement_timeout='5min';

我们可以查询pg_roles 表来获取关于 statement_timeout 的信息(包括它是如何设置的):

rolconfig 值是一个数组,因此我们可以使用 unnest 取消嵌套,那么一行会显示一个设置:

结语

为用户标识出滞后的查询是非常重要的,因为它让你对查询时间了如指掌,让你免受数据库性能陷入瘫痪的风险。为此,Navicat Monitor 3 监控工具的查询分析器画面顶部就设计出了这个费时查询图表。

另一种方法是限制查询在超时之前可以执行多久。正如在本文中提到,可以在 PostgreSQL 的数据库、会话甚至单个角色级别设置查询超时。如果你还没有设置 statement_timeout 变量,我们建议你尽快设置。这只是优化数据库性能的其中一步,但它有助于确保你的数据库实例保持良好状况和可用。

如果你有兴趣试用 Navicat 16 for PostgreSQL 或者 Navicat Monitor,欢迎点击 这里 下载14天免费全功能试用版。

PostgreSQL 相关技术文章

- 使用 Navicat Monitor 3 监控 PostgreSQL

- 使用 Navicat Monitor 3 跟踪 PostgreSQL 实例查询

- 在 Navicat Monitor 3 中查看 PostgreSQL 实例详细信息

 

往期回顾 

  1. 招募 Navicat Monitor 3.0 监控工具体验官 | 好礼相送
  2. 保姆级教程 | Navicat 人工备份和自动备份
  3. Navicat 16 正式支持 OceanBase 全线数据库产品
  4. Navicat 16 即将支持 Redis
  5. 免费试用 Navicat 16
  6. Navicat 20年发展史 | 1999 年成立于中国香港
  7. SQL 语句中 WHERE 1=1 的作用
  8. SQL 中计算总行数的百分比
  9. 互动有礼活动进行中 | 奖品为价值 819 元 Navicat Premium
  10. 假冒网站引发多重安全风险 | 官方严正声明:切勿在非官方渠道购买或下载 Navicat 软件

http://www.ppmy.cn/news/106518.html

相关文章

2023-5-30第三十天

effort力气,精力,努力 affect影响,改变,感动 effect结果,效果,影响 worker ampersand &号 asterrisk *号 deal difficulty lose magic proprientary专卖的,所有权 property vow…

Zabbix“专家坐诊”第193期问答汇总

问题一 Q:大佬们,怎么才能将zabbix-server接收到的数据全部展示出来呢?目前我的显示数据无法全部显示。 A:这个是用zabbix_sender发送过来的?确认下数据中是否包含空格等,如果有空格使用反斜杠转义或者单…

关于Addressable打包图集与图片都打进去造成冗余

1)关于Addressable打包图集与图片都打进去造成冗余 ​2)Unity如何计算Root动画旋转 3)IL2CPP编译的Protobuf反射类运行时报空 4)为什么Active Constraints会出现过高的现象 这是第337篇UWA技术知识分享的推送,精选了UW…

客户拖尾款,怎么办?

俗话说,欠钱的是大爷,一点都没错。对于跨国催款,难度更大。 外贸订单关闭后,你最头疼的是什么?交货时间延迟了吗?还是交付后出现质量问题,客户要求索赔? 这两种常见的情况都不是我头…

AspNetCore中的依赖注入详解

1 概述 ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制, ASP.NET Core通过定义接口的方式对它们进行了“标准化”,我们将这些标准化的组件称为服务, …

SpringBatch的两种实现方式: Tasklet 和 Chunk

直接上代码 ■ 共通部分&#xff1a; 1. 代码结构 2. pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-batch</artifactId></dependency> 3. framework/BatchAnnotation.java packa…

LTE网络的RSRQ、RSRP、SNR

内容来源openai: LTE网络对RSRQ的要求&#xff1a; LTE网络对RSRQ的要求是在正常情况下&#xff0c;RSRQ应该保持在-10dB到-20dB之间。如果RSRQ低于-20dB&#xff0c;信号质量会变得非常差&#xff0c;可能会导致数据传输速度变慢或者连接中断。如果RSRQ高于-10dB&#xff0c…

关于两个项目用的不是同一个node的解决 办法

问题描述&#xff1a; 两个前端项目&#xff0c;使用的不是同一个版本的node 和npm &#xff0c;导致总有一个项目启动不了&#xff0c;如何解决这个问题呐&#xff1f; 解决工具&#xff1a; nvm&#xff1a;node 版本管理器&#xff0c;也就是说&#xff1a;一个 nvm 可以管理…