• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >PostgreSQL > 修改一行代码提升 Postgres 性能 100 倍

修改一行代码提升 Postgres 性能 100 倍

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了postgres.exe,postgres数据库,postgres xl,postgres.exe是什么,postgres odbc等相关知识,希望本文的分享对您有所帮助

在一个(差)的PostgreSQL 查询中只要一个小小到改动(ANY(ARRAY[...])to ANY(VALUES(...)))就能把查询时间从20s缩减到0.2s。从最简单的学习使用 EXPLAIN ANALYZE开始,到学习使用 Postgres community 大量学习时间的投入将有百倍时间到回报。

使用Postgres监测慢的Postgres查询

在这周早些时候,一个用于我们的图形编辑器上的小表(10GB,1500万行)的主键查询,在我们的一个(多个)数据库上发生来大的查询性能问题。

99.9%到查询都是非常迅速流畅的,但是在一些使用大量的枚举值的地方,这些查询会需要20秒。花费如此多到时间在数据库上,意味着使用者必须在浏览器面前等待图形编辑器的响应。很明显只因为这0.01%就会造成很不好到影响。

查询和查询计划

下面是这个出问题的查询

表X有几千行数据,表C有1500万条数据。两张表的主键值“key”都有适当的索引。这是一个非常简单清晰的主键查询。但有趣的是,当增加主键内容的数量,如在主键有11,000个值的时候,通过在查询语句上加上 EXPLAIN (ANALYZE, BUFFERS)我们得到如下的查询计划。

在结果的最底部你可以看到,这个查询总共花费22秒。我们可以非常直观的通过下面的CPU使用率图观察到这22秒的花费。大部分的时间花费在 Postgres和 OS 上, 只有很少部分用于I/O .



在最低的层面,这些查询看起来就像是这些CPU利用率的峰值。CPU图很少有用,但是在这种条件下它证实了关键的一点:数据库并没有等待磁盘去读取数据。它在做一些排序,哈希以及行比较之类的事情。

第二个有趣的度量,就是距离这些峰值很近的轨迹,它们是由Postgres“取得”的行数(本例中没有返回,就看看再忽略掉吧)。



显然有些动作在规则的有条不紊的浏览过许多行:我们的查询。

Postgres 的问题所在:位图扫描
下面是行匹配的查询计划

这是我们喜欢开源和喜欢帮助用户的另外一个原因。Tom Lane是开源代码作者中最盛产的程序员之一,他建议我们做如下尝试:

把ARRAY改成VALUES,你能指出他们的不同点吗?

我们使用ARRAY[...]列举出所有的关键字以用来查询,但是这却欺骗了查询优化器。然而Values(...)却能够让优化器充分使用关键字索引。仅仅是一行代码的改变,并且没有产生任何语义的改变。

下面是新查询语句的写法,差别就在于第三和第十四行。

  ->  Index Scan using x_pkey on x  (cost=0.00..8.27 row

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 修改一行代码提升 Postgres 性能 100 倍

相关文章

  • 2017-05-11PostgreSQL 安装和简单使用第1/2页
  • 2017-05-11Linux CentOS 7源码编译安装PostgreSQL9.5
  • 2017-05-11Windows下PostgreSQL安装图解
  • 2017-05-11PostgreSQL安装、配置及简单使用方法
  • 2017-05-11Linux CentOS 7安装PostgreSQL9.3图文教程
  • 2017-05-11PostgreSQL中关闭死锁进程的方法
  • 2017-05-11在windows下手动初始化PostgreSQL数据库教程
  • 2017-05-11SQL Server数据迁移至PostgreSQL出错的解释以及解决方案
  • 2017-05-11PostgreSQL 创建表分区
  • 2017-05-11PostgreSQL管理工具phpPgAdmin入门指南

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • phpPgAdmin 常见错误和问题的解决办法
    • PostgreSQL中的XML操作函数代码
    • Postgre数据库Insert 、Query性能优化详解
    • Debian中PostgreSQL数据库安装配置实例
    • Windows PostgreSQL 安装图文教程
    • CentOS中运行PostgreSQL需要修改的内核参数及配置脚本分享
    • PostgreSQL的存储过程简单入门
    • PostgreSQL中常用的时间日期脚本使用教程
    • Windows下Postgresql数据库的下载与配置方法
    • Mybatis调用PostgreSQL存储过程实现数组入参传递

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有