PostgreSQL随机性能受到简单查询的影响

时间:2017-08-09 09:02:09

标签: postgresql jdbc database-performance

我们有一堆java REST服务,它们使用本地数据库来处理各种用例。我们注意到,在对这些服务进行压力测试时(20个并发客户端发出各种请求),一些请求(大约10个中的10个)需要大约5-10秒,而平均值为50-100毫秒。

我已将问题分解为数据库操作。这些都是小/空表上非常简单的操作。所以,我已经完成以下工作以获取更多信息:

  • 将JDBC连接池的setMaxWait设置为1秒,以便捕获池队列问题。没有异常被抛出。
  • deadlock_timeout设置为200毫秒,并在 postgresql.conf 文件中启用log_lock_waits,以便捕获是否存在任何锁定原因。我在postgresql中看不到这样的日志。
  • 启用并将log_min_duration_statement设置为1500毫秒,以确保数据库操作确实是原因。示例(此时gce_resolver是一个空表):

      

    2017-08-09 10:15:21 CEST LOG时长:1597.000 ms bind:/ * SiteDao.getAllGceResolvers * / SELECT * FROM gce_resolver ORDER BY name

  • 听起来不相关,但只是确定,通过将其设为log_autovacuum_min_duration启用0。在压力测试时没有产生相关的日志。

  • 已启用auto_explain并将auto_explain.log_min_duration设置为1000,将auto_explain.log_verbose设置为on。样本:

    2017-08-09 10:20:59 CEST LOG:  duration: 2881.699 ms  plan:
    Query Text: /* UserLicenseDao.insertLicense */ INSERT INTO user_license (user_dn, created) VALUES ($1, $2)
    Insert on public.user_license  (cost=0.00..0.01 rows=1 width=0)
      ->  Result  (cost=0.00..0.01 rows=1 width=0)
            Output: NULL::integer, 'CN=user172,OU=local'::text, '2017-08-09 10:20:56.153'::timestamp without time zone
    

这是一个非常简单的插入,看起来像成本很少,但出于某种原因不知怎的花了将近3秒。现在我没有想法了。什么可能导致这种延迟?为什么有时呢?

PostgreSQL 9.4.12

0 个答案:

没有答案