mt4下载官网auto_explain.log_parameter_max_length 控制查询参数值的记录正在本文中,咱们将相识 PostgreSQL AUTO_EXPLAIN效用的处事道理,以及为什么该当利用它来汇集正在临盆体系上推行的 SQL 语句的实质推行安置。
当您向 PostgreSQL 发送 SQL 语句时,该语句的推行形式如下图所示:
开始,基于文本的 SQL 语句被解析为可由数据库任职器以编程形式遍历的空洞语法树(比方盘问树)。
其次,优化器利用盘问树天生最佳推行安置,该推行安置消费起码的资源来天生所需的结果。
当您利用 EXPLAIN 号令时。 PostgreSQL 仅返回猜想推行安置,即优化器以为看待所供应的 SQL 语句最有用的安置。可是,当您运转 EXPLAIN 号令时,该语句并未真正推行。
另一方面,借使咱们运转 EXPLAIN ANALYZE,PostgreSQL 会运转该语句,以是咱们将获得实质推行安置,此中还包罗推行安置中每个操作的计时音讯。
开始,出于安宁来源,咱们不妨差别意正在临盆体系上运转盘问,以是,正在这种状况下,咱们不行容易地运转 EXPLAIN ANALYZE 号令来获取实质推行安置。
其次,假使咱们有权运转 EXPLAIN ANALYZE 号令,咱们也不妨会侦察到与客户怀恨的安置差别的安置。这不妨是因为几个来源变成的。
借使慢速盘问利用通用安置,假使运转 EXPLAIN ANALYZE(它会动态天生推行安置),您也不妨无法得到一样的安置。
以是,领会慢速盘问的一个更好的处置计划是,咱们获取 PostgreSQL 正在运转合连盘问时利用的实质推行安置。
PostgreSQL 是十分可定造的,它供应了几个咱们可能显示激活的扩展。
auto_explain 便是如许的一个扩展,它同意咱们捉拿花费岁月超出预订义阈值的 SQL 盘问的实质推行安置。
auto_explain模块供应了一种自愿纪录推行安置的法子,而无需手动运转。这看待正在大型操纵步调中追踪未优化的盘问额外有效。
该模块不供应SQL可拜访的效用。要利用它,只需将其加载到任职器中。您可能将其加载到单个会话中:
您务必是超等用户才力推行此操作。更类型的用法是通过正在f 中的 session_preload_libraries 中包罗 auto_explain 或 shared_preload_libraries 来将其预加载到一面或完全会话中。然后,无论盘问何时爆发,您都可能跟踪卓殊迂缓的盘问。当然,这必要付出必然的料理用度。
有几个修设参数支配 auto_explain 的行径。请注视,默认行径是不推行任何操作,以是借使您念要任何结果,则务必起码配置 auto_explain.log_min_duration。
auto_explain.log_min_duration 是将导致纪录该语句的安置的最短语句推行岁月(以毫秒为单元)。将其配置为 0 会纪录完全安置。 -1(默认值)禁用安置纪录。比方,借使将其配置为 250 毫秒,则将纪录运转 250 毫秒或更长的完全语句。惟有超等用户才力更改此配置。
auto_explain.log_parameter_max_length 支配盘问参数值的纪录。值为 -1(默认值)会完善纪录参数值。 0 禁用参数值纪录。大于零的值会将每个参数值截断为那么众字节。惟有超等用户才力更改此配置。
auto_explain.log_timing 支配正在纪录推行安置时是否打印每个节点的计时音讯;它相当于 EXPLAIN 的 TIMING 选项。反复读取体系时钟的开销不妨会显着减慢某些体系上的盘问速率,以是当仅必要实质行计数而不是切确岁月时,将此参数配置为紧闭不妨很有效。除非启用 auto_explain.log_analyze,不然此参数无效。该参数默认开启。惟有超等用户才力更改此配置。
auto_explain.log_triggers 导致正在纪录推行安置时包罗触发器推行统计音讯。除非启用 auto_explain.log_analyze,不然此参数无效。该参数默认紧闭。惟有超等用户才力更改此配置。
auto_explain.log_verbose 支配正在纪录推行安置时是否打印周密音讯;它相当于 EXPLAIN 的 VERBOSE 选项。该参数默认紧闭。惟有超等用户才力更改此配置。
auto_explain.log_settings 支配正在纪录推行安置时是否打印相合点窜的修设选项的音讯。输出中仅包罗影响盘问安置且其值与内置默认值差别的选项。该参数默认紧闭。惟有超等用户才力更改此配置。
auto_explain.log_nested_statements 导致研商纪录嵌套语句(正在函数内推行的语句)。当它紧闭时,仅纪录顶级盘问安置。该参数默认紧闭。惟有超等用户才力更改此配置。
auto_explain.sample_rate 导致 auto_explain 仅注明每个会话中的一小一面语句。默认值为 1,呈现注明完全盘问。借使是嵌套语句,则要么总计注明,要么不注明。惟有超等用户才力更改此配置。
正在平常利用中,这些参数是正在f 中配置的,纵然超等用户可能正在自身的会话中即时更改它们。类型用法不妨是:
推行安置为全外扫描,而且该确实的推行安置不必要通过explain analyze获取。