開始看 PostgreSQL 的文檔,覺得對於那些 .so 形式的二進制擴展函數,好比用 C 語言編寫的、Rust 編寫的等,PG 會把它們裝載到每一個鏈接的內存裏去。數據庫
由於 Rust 如今編譯出來的二進制文件還比較大,在 Linux 系統上一個函數的 .so 文件都有 3M 左右,因此有點擔憂當數據庫鏈接達到一兩千個時,每一個鏈接裏又調了N多這樣的函數,會不會形成內存溢出?併發
乾脆就來測試一下看好了。函數
後來通過測試,發現狀況不是這麼回事。測試
客戶端併發建立一千個數據庫鏈接,每一個鏈接裏分別測試如下幾種狀況:code
SELECT 1
查詢;pgxr_example_one
;pgxr_example_one_1/2/3/4/5
,每一個函數由一個 .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 函數的內存耗用仍是比較放心的了!文檔