PostgreSQL prepared statement和simple query的profile及性能差异

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: prepared statement是非常重要的高并发SQL优化手段之一,效果也显而易见。下面是测试,同时观察绑定和不绑定的情况下的profile。在未使用绑定变量的时候,新增或上升了一些硬解析相关的CODE。 测试数据 postgres=# create table test(id i

prepared statement是非常重要的高并发SQL优化手段之一,效果也显而易见。
下面是测试,同时观察绑定和不绑定的情况下的profile。
在未使用绑定变量的时候,新增或上升了一些硬解析相关的CODE。

测试数据

postgres=# create table test(id int primary key, info text);

postgres=# insert into test select generate_series(1,1000000),'test';

postgres=# create or replace function f1(int) returns setof text as 
$$

  select info from test where id=$1;

$$
 language sql;

测试用例

vi test.sql
\setrandom id 1 1000000
select f1(:id);

使用绑定变量

pgbench -M prepared -n -r -P 5 -f ./test.sql -c 64 -j 64 -T 100

progress: 10.0 s, 526016.9 tps, lat 0.120 ms stddev 0.033
progress: 15.0 s, 523072.8 tps, lat 0.121 ms stddev 0.027
progress: 20.0 s, 523305.2 tps, lat 0.121 ms stddev 0.017
progress: 25.0 s, 523320.9 tps, lat 0.121 ms stddev 0.015
progress: 30.0 s, 523290.4 tps, lat 0.121 ms stddev 0.016
progress: 35.0 s, 523216.3 tps, lat 0.121 ms stddev 0.015
progress: 40.0 s, 523046.3 tps, lat 0.121 ms stddev 0.022
progress: 45.0 s, 523200.9 tps, lat 0.121 ms stddev 0.015
progress: 50.0 s, 523853.5 tps, lat 0.121 ms stddev 0.016
progress: 55.0 s, 526587.1 tps, lat 0.120 ms stddev 0.005
progress: 60.0 s, 526710.0 tps, lat 0.120 ms stddev 0.008

TOP 调用

perf top

   PerfTop:   62851 irqs/sec  kernel:12.9%  exact:  0.0% [1000Hz cycles],  (all, 64 CPUs)
---------------------------------------------------------------------------------------------
  samples  pcnt function                      DSO
  _______ _____ _____________________________ ____________________________________
 39828.00  4.3% AllocSetAlloc                 /home/digoal/pgsql9.5.2/bin/postgres    
 33282.00  3.6% SearchCatCache                /home/digoal/pgsql9.5.2/bin/postgres    
 23098.00  2.5% base_yyparse                  /home/digoal/pgsql9.5.2/bin/postgres    
 21318.00  2.3% GetSnapshotData               /home/digoal/pgsql9.5.2/bin/postgres    
 13218.00  1.4% hash_search_with_hash_value   /home/digoal/pgsql9.5.2/bin/postgres    
 11399.00  1.2% _int_malloc                   /lib64/libc-2.12.so                       
 11362.00  1.2% LWLockAcquire                 /home/digoal/pgsql9.5.2/bin/postgres    
 11151.00  1.2% palloc                        /home/digoal/pgsql9.5.2/bin/postgres    
  9536.00  1.0% __GI_vfprintf                 /lib64/libc-2.12.so                       
  9160.00  1.0% __strcmp_sse42                /lib64/libc-2.12.so                       
  8997.00  1.0% schedule                      [kernel.kallsyms]                         
  8921.00  1.0% __strlen_sse42                /lib64/libc-2.12.so                       
  8799.00  0.9% nocachegetattr                /home/digoal/pgsql9.5.2/bin/postgres    
  8431.00  0.9% MemoryContextAllocZeroAligned /home/digoal/pgsql9.5.2/bin/postgres    
  8314.00  0.9% expression_tree_walker        /home/digoal/pgsql9.5.2/bin/postgres    
  7968.00  0.9% core_yylex                    /home/digoal/pgsql9.5.2/bin/postgres    
  7193.00  0.8% _bt_compare                   /home/digoal/pgsql9.5.2/bin/postgres    
  6402.00  0.7% _int_free                     /lib64/libc-2.12.so                       
  6185.00  0.7% memcpy                        /lib64/libc-2.12.so                       
  5988.00  0.6% fmgr_info_cxt_security        /home/digoal/pgsql9.5.2/bin/postgres    
  5749.00  0.6% __GI___libc_malloc            /lib64/libc-2.12.so                       
  5697.00  0.6% PostgresMain                  /home/digoal/pgsql9.5.2/bin/postgres    
  5444.00  0.6% fmgr_sql                      /home/digoal/pgsql9.5.2/bin/postgres    
  5372.00  0.6% LWLockRelease                 /home/digoal/pgsql9.5.2/bin/postgres    
  4917.00  0.5% grouping_planner              /home/digoal/pgsql9.5.2/bin/postgres    
  4902.00  0.5% ExecInitExpr                  /home/digoal/pgsql9.5.2/bin/postgres    
  4626.00  0.5% pfree                         /home/digoal/pgsql9.5.2/bin/postgres    
  4607.00  0.5% doCustom                      /home/digoal/pgsql9.5.2/bin/pgbench     
  4537.00  0.5% DirectFunctionCall1Coll       /home/digoal/pgsql9.5.2/bin/postgres    
  4521.00  0.5% fget_light                    [kernel.kallsyms]                         
  4329.00  0.5% pqParseInput3                 /home/digoal/pgsql9.5.2/lib/libpq.so.5.8
  4164.00  0.4% AllocSetFree                  /home/digoal/pgsql9.5.2/bin/postgres    
  4013.00  0.4% hash_any                      /home/digoal/pgsql9.5.2/bin/postgres    
  3998.00  0.4% new_list                      /home/digoal/pgsql9.5.2/bin/postgres    
  3994.00  0.4% do_select                     [kernel.kallsyms]                         
  3653.00  0.4% LockReleaseAll                /home/digoal/pgsql9.5.2/bin/postgres    
  3618.00  0.4% hash_search                   /home/digoal/pgsql9.5.2/bin/postgres    
  3505.00  0.4% palloc0                       /home/digoal/pgsql9.5.2/bin/postgres    
  3457.00  0.4% ScanKeywordLookup             /home/digoal/pgsql9.5.2/bin/postgres    
  3390.00  0.4% FunctionCall2Coll             /home/digoal/pgsql9.5.2/bin/postgres    
  3296.00  0.4% LockAcquireExtended           /home/digoal/pgsql9.5.2/bin/postgres    
  3275.00  0.4% __memset_sse2                 /lib64/libc-2.12.so                       
  3201.00  0.3% __cfree                       /lib64/libc-2.12.so                       
  3125.00  0.3% lappend                       /home/digoal/pgsql9.5.2/bin/postgres    
  3004.00  0.3% exec_bind_message             /home/digoal/pgsql9.5.2/bin/postgres    
  2995.00  0.3% __strcpy_ssse3                /lib64/libc-2.12.so                       
  2992.00  0.3% device_not_available          [kernel.kallsyms]                   

不使用绑定变量
性能明显下降

pgbench -M simple -n -r -P 5 -f ./test.sql -c 64 -j 64 -T 100

progress: 10.0 s, 480056.6 tps, lat 0.132 ms stddev 0.028
progress: 15.0 s, 480355.0 tps, lat 0.132 ms stddev 0.019
progress: 20.0 s, 480321.8 tps, lat 0.132 ms stddev 0.020
progress: 25.0 s, 480246.2 tps, lat 0.132 ms stddev 0.019
progress: 30.0 s, 480274.6 tps, lat 0.132 ms stddev 0.020
progress: 35.0 s, 480286.1 tps, lat 0.132 ms stddev 0.018
progress: 40.0 s, 480229.3 tps, lat 0.132 ms stddev 0.020
progress: 45.0 s, 480095.6 tps, lat 0.132 ms stddev 0.021
progress: 50.0 s, 480098.9 tps, lat 0.132 ms stddev 0.020
progress: 55.0 s, 480066.5 tps, lat 0.132 ms stddev 0.025
progress: 60.0 s, 480148.3 tps, lat 0.132 ms stddev 0.021

TOP 调用

perf top
   PerfTop:   65503 irqs/sec  kernel:12.3%  exact:  0.0% [1000Hz cycles],  (all, 64 CPUs)
----------------------------------------------------------------------------------------------
  samples  pcnt function                       DSO
  _______ _____ ______________________________ ____________________________________
 45824.00  4.6% AllocSetAlloc                  /home/digoal/pgsql9.5.2/bin/postgres    
 38982.00  3.9% base_yyparse                   /home/digoal/pgsql9.5.2/bin/postgres    
 35333.00  3.6% SearchCatCache                 /home/digoal/pgsql9.5.2/bin/postgres    
 23770.00  2.4% GetSnapshotData                /home/digoal/pgsql9.5.2/bin/postgres    
 12440.00  1.3% palloc                         /home/digoal/pgsql9.5.2/bin/postgres    
 12092.00  1.2% hash_search_with_hash_value    /home/digoal/pgsql9.5.2/bin/postgres    
 12092.00  1.2% _int_malloc                    /lib64/libc-2.12.so                       
 11911.00  1.2% core_yylex                     /home/digoal/pgsql9.5.2/bin/postgres    上升
 11286.00  1.1% LWLockAcquire                  /home/digoal/pgsql9.5.2/bin/postgres    
 10893.00  1.1% __strcmp_sse42                 /lib64/libc-2.12.so                       
 10759.00  1.1% MemoryContextAllocZeroAligned  /home/digoal/pgsql9.5.2/bin/postgres    上升
  9946.00  1.0% expression_tree_walker         /home/digoal/pgsql9.5.2/bin/postgres    上升
  9175.00  0.9% schedule                       [kernel.kallsyms]                         
  9049.00  0.9% nocachegetattr                 /home/digoal/pgsql9.5.2/bin/postgres    
  8859.00  0.9% __strlen_sse42                 /lib64/libc-2.12.so                       
  8020.00  0.8% __GI_vfprintf                  /lib64/libc-2.12.so                       
  7396.00  0.7% _int_free                      /lib64/libc-2.12.so                       
  6847.00  0.7% __GI___libc_malloc             /lib64/libc-2.12.so                       
  6842.00  0.7% _bt_compare                    /home/digoal/pgsql9.5.2/bin/postgres    
  6468.00  0.7% grouping_planner               /home/digoal/pgsql9.5.2/bin/postgres    
  5468.00  0.6% fmgr_sql                       /home/digoal/pgsql9.5.2/bin/postgres    
  5403.00  0.5% memcpy                         /lib64/libc-2.12.so                       
  5328.00  0.5% LWLockRelease                  /home/digoal/pgsql9.5.2/bin/postgres    
  5277.00  0.5% fmgr_info_cxt_security         /home/digoal/pgsql9.5.2/bin/postgres    
  5024.00  0.5% ExecInitExpr                   /home/digoal/pgsql9.5.2/bin/postgres    
  4819.00  0.5% DirectFunctionCall1Coll        /home/digoal/pgsql9.5.2/bin/postgres    
  4620.00  0.5% new_list                       /home/digoal/pgsql9.5.2/bin/postgres    
  4582.00  0.5% fget_light                     [kernel.kallsyms]                         
  4563.00  0.5% ScanKeywordLookup              /home/digoal/pgsql9.5.2/bin/postgres    
  4501.00  0.5% doCustom                       /home/digoal/pgsql9.5.2/bin/pgbench     
  4453.00  0.4% AllocSetFree                   /home/digoal/pgsql9.5.2/bin/postgres    
  4354.00  0.4% pfree                          /home/digoal/pgsql9.5.2/bin/postgres    
  4096.00  0.4% pqParseInput3                  /home/digoal/pgsql9.5.2/lib/libpq.so.5.8
  4050.00  0.4% do_select                      [kernel.kallsyms]                         
  4000.00  0.4% lappend                        /home/digoal/pgsql9.5.2/bin/postgres    
  3892.00  0.4% hash_any                       /home/digoal/pgsql9.5.2/bin/postgres    
  3863.00  0.4% __memset_sse2                  /lib64/libc-2.12.so                       
  3798.00  0.4% expression_tree_mutator        /home/digoal/pgsql9.5.2/bin/postgres    下降
  3777.00  0.4% palloc0                        /home/digoal/pgsql9.5.2/bin/postgres    
  3773.00  0.4% check_stack_depth              /home/digoal/pgsql9.5.2/bin/postgres    新增
  3643.00  0.4% heap_getsysattr                /home/digoal/pgsql9.5.2/bin/postgres    新增
  3487.00  0.4% SearchSysCache                 /home/digoal/pgsql9.5.2/bin/postgres    新增
  3485.00  0.4% LockReleaseAll                 /home/digoal/pgsql9.5.2/bin/postgres    
  3460.00  0.3% eval_const_expressions_mutator /home/digoal/pgsql9.5.2/bin/postgres    新增
  3444.00  0.3% FunctionCall2Coll              /home/digoal/pgsql9.5.2/bin/postgres    
  3419.00  0.3% __strcpy_ssse3                 /lib64/libc-2.12.so                       
  3201.00  0.3% LockAcquireExtended            /home/digoal/pgsql9.5.2/bin/postgres
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
7月前
|
存储 关系型数据库 数据库
postgresql|数据库|提升查询性能的物化视图解析
postgresql|数据库|提升查询性能的物化视图解析
693 0
|
4月前
|
缓存 关系型数据库 数据库
PostgreSQL性能
【8月更文挑战第26天】PostgreSQL性能
72 1
|
3月前
|
缓存 关系型数据库 数据库
如何优化 PostgreSQL 数据库性能?
如何优化 PostgreSQL 数据库性能?
132 2
|
2月前
|
存储 关系型数据库 MySQL
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
四种数据库对比 MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
|
3月前
|
缓存 关系型数据库 数据库
PostgreSQL的性能
PostgreSQL的性能
164 2
|
4月前
|
缓存 关系型数据库 数据库
PostgreSQL 查询性能
【8月更文挑战第5天】PostgreSQL 查询性能
83 8
|
4月前
|
关系型数据库 Java 数据库
PostgreSQL性能
【8月更文挑战第5天】PostgreSQL性能
102 7
|
4月前
|
监控 关系型数据库 数据库
如何优化PostgreSQL的性能?
【8月更文挑战第4天】如何优化PostgreSQL的性能?
253 7
|
4月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
434 0
|
存储 人工智能 关系型数据库
5倍性能提升,阿里云AnalyticDB PostgreSQL版新一代实时智能引擎重磅发布
2023 云栖大会上,AnalyticDB for PostgreSQL新一代实时智能引擎重磅发布,全自研计算和行列混存引擎较比开源Greenplum有5倍以上性能提升。AnalyticDB for PostgreSQL与通义大模型家族深度集成,推出一站式AIGC解决方案。阿里云新发布的行业模型及“百炼”平台,采用AnalyticDB for PostgreSQL作为内置向量检索引擎,性能较开源增强了2~5倍。大会上来自厦门国际银行、三七互娱等知名企业代表和瑶池数据库团队产品及技术资深专家们结合真实场景实践,深入分享了最新的技术进展和解析。
5倍性能提升,阿里云AnalyticDB PostgreSQL版新一代实时智能引擎重磅发布

相关产品

  • 云原生数据库 PolarDB