- PostgreSQL High Performance Cookbook
- Chitij Chauhan Dinesh Kumar
- 510字
- 2021-07-09 18:47:18
Memory benchmarking
In this recipe, we will be discussing how to benchmark the memory speed using open source tools.
Getting ready
As with the CPU test suite, phoronix supports one another memory test suite, which covers RAM benchmarking. Otherwise, we can also use a dedicated memtest86 benchmarking tool, which performs memory benchmarking during a server bootup phase. Another neat trick would be to create a tmpfs mount point in the RAM and then create a tablespace on it in PostgreSQL. Once we create the tablespace, we can then create in-memory tables, where we can benchmark the table read/write operations. We can also use the dd command to measure the memory read/write operations.
How to do it...
Let us discuss how to install phoronix and how to configure the tmpfs
mount point in Linux:
Phoronix
Let's execute the following phoronix
command, which will install the memory test suit and perform memory benchmarking. Once the benchmarking is completed, as aforementioned, observe the HTML report:
$ phoronix-test-suite benchmark pts/memory Phoronix Test Suite v6.8.0 Installed: pts/ramspeed-1.4.0 To Install: pts/stream-1.3.1 To Install: pts/cachebench-1.0.0
tmpfs
In Linux, tmpfs
is a temporary filesystem, which uses the RAM rather than the disk storage. Anything we store in tmpfs
will be cleared once we restart the system:
Note
Refer to the URL for more information about tmpfs: https://en.wikipedia.org/wiki/Tmpfs and https://www.jamescoyle.net/knowledge/1659-what-is-tmpfs.
Let's create a new mount point based on tmpfs
using the following command:
# mkdir -p /memmount # mount -t tmpfs -o size=1g tmpfs /memmount # df -kh -t tmpfs Filesystem Size Used Avail Use% Mounted on tmpfs 1.9G 96K 1.9G 1% /dev/shm tmpfs 1.9G 8.9M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup tmpfs 1.0G 0 1.0G 0% /memmount
Let's create a new folder in memmount
and assign it to the tablespace.
# mkdir -p /memmount/memtabspace # chown -R postgres:postgres /memmount/memtabspace/ postgres=# CREATE TABLESPACE memtbs LOCATION '/memmount/memtabspace'; CREATE TABLESPACE postgres=# CREATE TABLE memtable(t INT) TABLESPACE memtbs; CREATE TABLE
Write test
postgres=# INSERT INTO memtable VALUES(generate_series(1, 1000000)); INSERT 0 1000000 Time: 1372.763 ms postgres=# SELECT pg_size_pretty(pg_relation_size('memtable'::regclass)); pg_size_pretty ---------------- 35 MB (1 row)
From the preceding results, to insert 1 million records it took approximately 1 second with a writing speed of 35 MB per second.
Read test
postgres=# SELECT COUNT(*) FROM memtable; count --------- 1000000 (1 row) Time: 87.333 ms
From the preceding results, to read the 1 million records it took approximately 90 milliseconds with a reading speed of 385 MB per second, which is pretty fast for the local system configuration. The preceding read test was performed after clearing the system cache and by restarting the PostgreQSL instance, which avoids the system buffers.
How it works...
In the preceding tmpfs
example, we created an in-memory table, and all the system calls PostgreQSL tries to perform to read/write the data will be directly affecting the memory rather than the disk, which gives a major performance boost. Also, we need to consider to drop these in-memory tablespace, tables after testing, since these objects will physically vanish after system reboot.
- Photoshop CS4經典380例
- PHP開發手冊
- 現代機械運動控制技術
- JBoss ESB Beginner’s Guide
- 計算機系統結構
- Implementing Oracle API Platform Cloud Service
- Hybrid Cloud for Architects
- ESP8266 Home Automation Projects
- Nginx高性能Web服務器詳解
- Applied Data Visualization with R and ggplot2
- 基于敏捷開發的數據結構研究
- 單片機技術項目化原理與實訓
- Keras Reinforcement Learning Projects
- Flash CS3動畫制作融會貫通
- Arduino創意機器人入門:基于ArduBlock(第2版)