Art*_*rov 11 sql database postgresql optimization freebsd
我正在使用FreeBSD PostgreSQL后端设置一个Web应用程序.我正在寻找一些数据库性能优化工具/技术.
数据库优化通常是两件事的组合
减少查询量通常是通过缓存非易失性/不太重要的数据(例如"哪些用户在线"或"此用户的最新帖子是什么?")在应用程序内部(如果可能)或在外部 - 更高效 - 数据存储(memcached,redis等).如果您拥有非常重量级的信息(例如命中计数器)并且不需要ACID语义,您还可以考虑将其从Postgres数据库移到更高效的数据存储.
优化查询运行时更加棘手 - 这可能相当于创建特殊索引(或首先是索引),更改(可能是非规范化)数据模型或更改应用程序在使用数据库时所采用的基本方法.例如,看看Pagination完成Postgres的方式,由Markus Winand谈论如何重新思考分页的概念,使其更具数据库效率
但要了解应首先查看哪些查询,您需要知道它们执行的频率以及它们平均运行的时间.
一种方法是记录所有(或"慢")查询,包括其运行时,然后解析查询日志.这个问题的一个很好的工具pgfouine已经在本讨论的前面提到过,它已被替换pgbadger为用更友好的语言编写,更快,更积极地维护.
无论pgfouine和pgbadger一个事实,即他们需要启用查询日志记录,这可能会导致明显的性能损失数据库或带你进入硬盘空间的烦恼上的事实,顶部是解析日志与工具可能需要相当长的时间和韩元遭受不会为您提供有关数据库内容的最新见解.
为了解决这些缺点,现在有两个扩展可以直接在数据库中跟踪查询性能 - pg_stat_statements(仅在9.2或更高版本中有用)和pg_stat_plans.这两个扩展都提供相同的基本功能 - 跟踪给定的"规范化查询"(查询字符串减去所有表达式文字)的运行频率以及总共花费了多长时间.由于这是在查询实际运行时完成的事实,这是以非常有效的方式完成的,在合成基准测试中可测量的开销小于5%.
从信息的角度来看,查询列表本身非常"干".第三个扩展试图解决这个问题,并提供更好的数据表示pg_statsinfo(同时pg_stats_reporter),但这是一个启动和运行的承诺.
为了提供更方便的解决这个问题,我开始在其上围绕重点商业项目的工作pg_stat_statements,并pg_stat_plans和增强的许多其他的数据收集到的信息拉出数据库.它被调用pganalyze,您可以在https://pganalyze.com/找到它.
为了简要概述Postgres监控区域中有趣的工具和项目,我还开始在Postgres Wiki上编制一个定期更新的列表.
| 归档时间: |
|
| 查看次数: |
8447 次 |
| 最近记录: |