PostgreSQL 调用 Rust 函数内存耗用研究

开始看 PostgreSQL 的文档,以为对于那些 .so 形式的二进制扩展函数,比如用 C 语言编写的、Rust 编写的等,PG 会把它们装载到每个连接的内存里去。

因为 Rust 现在编译出来的二进制文件还比较大,在 Linux 系统上一个函数的 .so 文件都有 3M 左右,所以有点担心当数据库连接达到一两千个时,每个连接里又调了N多这样的函数,会不会造成内存溢出?

干脆就来测试一下看好了。

后来经过测试,发现情况不是这么回事。

客户端并发创建一千个数据库连接,每个连接里分别测试以下几种情况:

  1. 执行最简单的 SELECT 1 查询;
  2. 执行其他简单的 SQL 查询,结果数量为空的;
  3. 执行单个的 Rust 函数 pgxr_example_one
  4. 执行5个 Rust 函数 pgxr_example_one_1/2/3/4/5,每个函数由一个 .so 文件提供;
  5. 执行10个 Rust 函数,包括数据查询等,每个函数由一个 .so 文件提供;
dbHelper.Query(`select pgxr_example_one(1)`)
dbHelper.Query(`select pgxr_example_one_1(1)`)
dbHelper.Query(`select pgxr_example_one_2(1)`)
dbHelper.Query(`select pgxr_example_one_3(1)`)
dbHelper.Query(`select pgxr_example_one_4(1)`)
dbHelper.Query(`select pgxr_example_one_5(1)`)
dbHelper.Query(`select rust_query_row_by_pk('public.test2', '1')`)
dbHelper.Query(`select rust_query_rows_by_fk('public.test2', 'class', '1')`)
dbHelper.Query(`select test_get_table_columns()`)
dbHelper.Query(`select test_sleep_3_seconds(3)`)

发现前三种情况内存增加得差不多,都是增加 1.9G 左右, 第三种情况比第一种情况内存增加 20 多 M,第四种情况比第一种情况内存增加 100M 左右,第五种情况比第一种情况内存增加 300M 左右。

从此,对于 Rust 函数的内存耗用还是比较放心的了!

转载于:https://my.oschina.net/u/1461794/blog/2885681

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值