对 Rails/Heroku 上的 Postgres 数据库进行意外的 SQL 查询

2024-02-12

我正在使用 NewRelic 深入研究对我的 Rails 应用程序之一的非常长的请求,并发现许多看起来完全陌生的 SQL 查询占用了相当长的时间。我用谷歌搜索过,但我一无所获,不知道它们是什么,更不用说我是否可以阻止它们发生。

SELECT COUNT(*) FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind in (?, ?) AND c.relname = ? AND n.nspname = ANY (current_schemas(false))

…and…

SELECT a.attname, format_type(a.atttypid, a.atttypmod), pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod FROM pg_attribute a LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum WHERE a.attrelid = ?::regclass AND a.attnum > ? AND NOT a.attisdropped ORDER BY a.attnum

…每次发生 7 次,总计分别耗时 145 毫秒和 135 毫秒。

SELECT DISTINCT(attr.attname) FROM pg_attribute attr INNER JOIN pg_depend dep ON attr.attrelid = dep.refobjid AND attr.attnum = dep.refobjsubid INNER JOIN pg_constraint cons ON attr.attrelid = cons.conrelid AND attr.attnum = cons.conkey[?] WHERE cons.contype = ? AND dep.refobjid = ?::regclass

…执行了 2 次,花费了 104 毫秒,并且…

SHOW search_path

…在一次调用中命令 45 毫秒。

我的直觉说这些与 Postgres Rails 适配器有关,但我不明白是什么触发了它们或它们在做什么,或者(更重要的是)它们为什么在典型请求期间触发。


我刚刚更彻底地检查了日志,看起来运行此请求的 Dyno 已在几秒钟前转换为“向上”,因此该请求很可能是第一个。


表 pg_class、pg_attribute、pg_depend 等都描述了 postgres 中的表、列和依赖关系。在 Rails 中,模型类由表定义,因此 Rails 读取表和列来找出每个模型的属性。

在开发模式下,每次访问模型时它都会查找这些值,因此如果您最近进行了更改,Rails 会知道。在生产模式下,Rails 会缓存这些内容,这样您就不会那么频繁地看到这些内容,因此这确实不是一个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 Rails/Heroku 上的 Postgres 数据库进行意外的 SQL 查询 的相关文章

  • 捆绑包 - 从另一台电脑复制粘贴宝石

    我正在尝试设置 Rails 应用程序 该应用程序依赖于大量的宝石 宝石已预先安装在vendor gems我从朋友那里获得的副本的文件夹 现在 考虑到那些闭源宝石的不可用性 bundle install path home umang pro
  • MS-Access 查询中的语法错误(缺少运算符)

    以下查询给了我 missing operator 语法错误 所需的输出是表中数据的组合 dbo tbl 和意见 vw 我用过的所有钥匙都存在 有任何想法吗 SELECT dbo tbl BOD fpartno AS PartNumber d
  • Sentry 与 @sentry/webpack-plugin 和 heroku

    我正在使用 webpack 来构建我的应用程序 它可以在本地使用 sentry webpack plugin 它自动生成版本并将源映射上传到 Sentry 但是 如果我尝试在 Heroku 上构建相同的应用程序 则会出现以下错误 Error
  • oracle日期序列?

    我有一个 oracle 数据库 我需要一个包含 2 年所有日期的表 例如来自01 01 2011 to 01 01 2013 首先我想到了一个序列 但显然唯一支持的类型是数字 所以现在我正在寻找一种有效的方法来做到这一点 欢呼骗局 如果您想
  • 新手:我的例子中的文本替换

    In my 红宝石 on Rails应用程序中 我的助手中有一个方法 它通过以下方式打开文件 content File open myfile txt The 文件内容就好像 my car my seat my age my son my
  • Rails 4 - 将地址保存为数据库中的一列

    我是 Rails 新手 正在开发一个简单的应用程序 我的 ERD 中有一个名为 Client 的模型 并且希望保存每个客户的地址 我最初的想法是将地址保存为单独的字段 即 rails g model Client address first
  • sqlalchemy 的 row_to_json 语法

    我想弄清楚如何将 Postgres 9 2 row to json 与 SqlAlchemy 一起使用 但是我无法想出任何有效的语法 details foo row q select Foo where Foo bar id Bar id
  • BULK INSERT 中格式附近的语法不正确?

    我试图找出为什么我使用的 BULK INSERT 命令无法识别命令中使用的 FORMAT 和 FIELDQUOTE 选项 BULK INSERT dbo tblM2016 RAW Current Import File FROM x tms
  • 当我运行捆绑安装时,Nokogiri“无法构建 gem 本机扩展”

    我在跑bundle install我收到此错误 Building nokogiri using system libraries Gem Ext BuildError ERROR Failed to build gem native ext
  • pg_stat_activity 中具有“空闲”状态的持久“COMMIT”查询

    如果我查询 select from pg stat activity where application name example application 我得到了很多行 哪个州是idle查询是COMMIT 它们是持久的并且不会消失 一段时
  • 动态/条件 SQL 连接?

    我在 MSSQL 表 TableB 中有数据 其中 dbo tableB myColumn 在特定日期后更改格式 我正在做一个简单的连接到该表 Select dbo tableB theColumnINeed from dbo tableA
  • 从 ISO 周中提取日期 (201905) BigQuery

    我需要从 ISO 周数中提取星期日的日期 即 201905 它需要位于 standardSQL 中 因为它将使用不支持旧版本的脚本进行调度 我尝试从 Google Sheets 调整工作公式 但无法弄清楚 Google Sheets 的原始
  • 关系数据库和图数据库的比较

    有人可以向我解释一下 MySQL 等关系数据库与 Neo4j 等图形数据库相比的优缺点吗 在 SQL 中 您有多个表 它们之间有不同的 id 链接 然后你必须加入来连接表 从新手的角度来看 为什么要将数据库设计为需要联接 而不是像图形数据库
  • 如何通过逗号分隔将 2 行合并为一行?

    我需要将这些单独的行合并到一列 我现在如何通过逗号分隔合并列 CID Flag Value 1 F 10 1 N 20 2 F 12 2 N 23 2 F 14 3 N 21 3 N
  • 显示多个表的账户余额

    我有以下两个表 其中存储有关贷记和借记记录的信息 couponCr 表包含 voucherType voucherPrefix voucherNo crparty cramount SALES S 1 1 43000 SALES S 2 1
  • 如何编写运行 Rails db:migrate 任务的 rake 任务?

    我想运行 db migrate VERSION 0 然后在我自己的 rake 任务中运行 db migrate 我对如何做到这一点感到困惑 我需要特殊的要求声明吗 我的 rake 任务将驻留在 Rails 应用程序的 lib tasks 目
  • 如何在查询中生成序列号?

    我们使用 PostgreSQL v8 2 3 如何在查询输出中生成序列号 我想显示查询返回的每一行的序列号 例子 SELECT employeeid name FROM employee 我希望生成并显示从一开始的每一行的序列号 你有两个选
  • 设置约束可延迟在 PostgreSQL 事务上不起作用

    情况是这样的 我有两个表 其中一个引用另一个 例如 table2 引用 table1 创建这些表时 我确实将外键约束设置为 DEFERRABLE 将 ON UPDATE 和 ON DELETE 子句设置为 NO ACTION 这是默认值 但
  • 出于安全目的,您是否有理由不执行自己的算法来打乱 ID?

    我计划实现我自己的非常简单的 哈希 公式 为具有多个用户的应用程序添加一层安全性 我目前的计划如下 用户创建一个帐户 此时后端会生成一个 ID ID 通过公式运行 假设 ID 57 8926 36 7 或同样随机的东西 然后 我将新的用户
  • 如何比较表中最后一个和倒数第二个条目的值?

    我在 Oracle 中有一个名为quotes 的表 其中包含两列 date 和value 我想比较表中最后一个条目和倒数第二个条目的值 在此示例中 我想获取日期13 1 和 11 1在一行中以及每个日期的值之间的差异 10 5 5 报价表

随机推荐

  • (MVC 3 Razor) - 循环遍历 3 列 div 的更简单方法

    目前我在 CSHTML 中使用以下代码 int i 0 foreach var item in Model Traders if i 3 0 if i 1 div class row div class four column div cl
  • 获取 Firefox SDK main.js 中某个文件的内容

    所以我正在开发一个 Firefox 插件 它可以向任何网页的 DOM 添加一些 HTML 这里的想法是我使用一个名为template html作为模板 位于dataaddon 文件夹内的文件夹 接下来 我想使用该内容template htm
  • 如何像Notes App一样设置UITextView内容插入

    我正在开发一个应用程序 我需要在 iPhone 中提供类似 Notes App 的功能 如第一个屏幕截图所示 最初 笔记在内容开始之前留下一个选项卡 我也想做同样的事情 当我设置时左侧内容插图 UITextView 到 25 时 它显示如屏
  • 是否可以使“type”的输出返回不同的类?

    所以免责声明 这个问题 https stackoverflow com questions 56879033 how do i override type method in python object noredirect 1 comme
  • Python/Tkinter:Tkinter StringVar(IntVar 等)线程安全吗?

    Tkinter StringVar IntVar FloatVar 等 线程安全吗 后台线程可以读取或写入这些对象吗 或者我必须使用队列在后台线程和主 Tkinter GUI 线程之间传递信息 并让我的主 Tkinter 线程弹出队列并相应
  • .NET 桌面应用程序的最佳崩溃报告框架? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有几个简单的 Windows 窗体应用程序 我想向其中添加崩溃报告 可以为我提供有关用户计算机 当然
  • Serilog不将日志输出到txt文件中

    我使用 dotnet 工作服务 net 5 我集成了 Serilog 以及浓缩器和接收器 但由于某种原因 我在文件日志中看不到任何输出 这是我的 appsettings json ConnectionStrings DefaultConne
  • 使用数组和对象将多个值插入到雪花表中

    我试图使用数组和结构插入多行 通过 SQL 语句转换为 Snowflake 要将值数组插入到列中 我正在使用ARRAY CONSTUCT函数并插入我正在使用的结构 字典 对象OBJECT CONSTRUCT功能 E g insert int
  • 新版本上传到 iTunes Connect 后消失

    我正在尝试使用 Xcode 8 将构建版本上传到 iTunesConnect Xcode 显示上传成功 在 iTunesConnect 的 活动 选项卡中 我看到我的构建出现了 并且被标记为 正在处理 但几分钟后 这个构建就消失了 我在任何
  • 对 CountedCompleter 的文档和来源感到困惑

    这是一个代码片段java util concurrent CountedCompleter类 JDK 1 8 0 25 If the pending count is nonzero decrements the count otherwi
  • 使用 JodaTime 自动将秒转换为年/日/小时/分钟?

    当 x 超过 3600 秒时 有没有办法将 x 秒转换为 y 小时和 z 秒 同样 当x超过60但小于3600秒时 使用JodaTime 将其转换为 a分b秒 我知道我必须在 periodFormatter 中指定我需要的内容 但我不想指定
  • 传递常量矩阵

    参考this https stackoverflow com questions 546860 passing arrays and matrices to functions as pointers and pointers to poi
  • 对象内部字段的 Arangodb AQL 更新

    给出以下集合文档示例 timestamp 1413543986 message message readed 8 null 9 null 22 null type 1014574149174 如何使用键 readed 更新对象中特定键的值
  • 我可以使用 groovy 的默认 getter/setter 来帮助实现 java 接口吗?

    我正在从导入的库扩展一个非常简单的 Java 接口 该接口非常简单 它声明的唯一方法是属性列表的 getter 和 setter 我的应用程序是用 Groovy 编写的 因此我想使用 Groovy 类来实现这个 Java 接口 我的印象是
  • CryptoAPI 返回 HMAC_SHA1 的错误结果

    我将下面的代码与 Crypto API 一起使用 但根据其他 API 和库的测试 我没有得到预期的结果 我正在使用钥匙 key 数据是 message 例如 使用 Indy 的 TidHMACSHA1 我得到 2088df74d5f2146
  • 使用数组绘制 D3 简单折线图

    我正在尝试实现这段代码 http bl ocks org 3883245 http bl ocks org 3883245 但我不是加载 TSV 文件 而是从数组加载数据 数组如下所示 2012 10 02 2 2012 10 09 2 2
  • 什么时候应该在非成员函数之前写入关键字“static”?

    我最近在 SO 上看到了一些关于static函数之前的关键字 我想知道如何正确使用它 1 什么时候应该写关键字static在非成员函数之前 2 在头文件中定义静态非成员函数有危险吗 为什么不 附带问题 3 是否可以以某种方式在头文件中定义一
  • 没有路线匹配 [POST]“/sessions/new”(rails 4 正在运行)

    我正在阅读 Rails 4 In action 一书 但遇到了以下错误 No route matches POST sessions new 我不知道为什么 因为我已经按照教程进行了操作 这让我相信教程本身是有缺陷的 无论如何 由于某种原因
  • 接下来是 Revolution R 的 foreach 包?

    我已经浏览了很多文档并进行了大量的谷歌搜索 但找不到以下问题的答案 是否有一种方法可以并行诱导 类似下一个 功能foreach循环使用foreach包裹 具体来说 我想做一些类似的事情 这不适用于next但没有 foreach i 1 10
  • 对 Rails/Heroku 上的 Postgres 数据库进行意外的 SQL 查询

    我正在使用 NewRelic 深入研究对我的 Rails 应用程序之一的非常长的请求 并发现许多看起来完全陌生的 SQL 查询占用了相当长的时间 我用谷歌搜索过 但我一无所获 不知道它们是什么 更不用说我是否可以阻止它们发生 SELECT