PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách đánh giá hiệu suất PostgreSQL bằng Sysbench

Đo điểm chuẩn là một cách để khám phá hiệu suất của cơ sở hạ tầng của bạn. Sysbench là một công cụ tuyệt vời để đánh giá các máy chủ PostgreSQL. Trong bài đăng trên blog này, chúng tôi sẽ chỉ cho bạn cách tạo tải thử nghiệm bằng cách sử dụng sysbench. Chúng tôi sẽ sử dụng thiết lập sao chép luồng chủ-tớ hai nút bởi ClusterControl. Điều này cũng sẽ giúp chúng tôi tạo ra một số hoạt động trên cụm và kiểm tra xem bản sao có hoạt động như mong đợi hay không.

Chúng tôi sẽ cài đặt phiên bản mới nhất của sysbench, hiện đang được duy trì tại đây. Chúng tôi sẽ sử dụng gói cập nhật hơn được cung cấp trong trang Github chính thức để cài đặt sysbench. Chúng tôi cũng sẽ sử dụng mã nhị phân PostgreSQL 9.6 tiêu chuẩn từ trang tải xuống PostgreSQL. Lưu ý rằng đường dẫn được sử dụng trong bài đăng blog này có thể khác nhau tùy thuộc vào phiên bản PostgreSQL và nhà cung cấp mà bạn đã cài đặt.

Lưu ý thêm, chúng tôi đã đề cập đến một bài đăng trên blog tương tự về đánh giá hiệu suất PostgreSQL bằng pgbench trong bài đăng blog này, Cách đánh giá hiệu suất PostgreSQL.

Cài đặt Sysbench

Cài đặt sysbench rất dễ dàng. Đối với Debian / Ubuntu:

$ curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
$ sudo apt -y install sysbench

Và đối với RHEL / CentOS:

$ curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
$ sudo yum -y install sysbench

Cài đặt gói sysbench:

$ yum install sysbench

Xác minh phiên bản:

$ sysbench --version
sysbench 1.0.15

Hiện chúng tôi đã cài đặt sysbench.

Khởi tạo dữ liệu thử nghiệm

Nếu bạn đã quen với sysbench, nó sử dụng các giá trị mặc định sau cho các tham số PostgreSQL:

  • pgsql-host =localhost
  • pgsql-port =5432
  • pgsql-user =sbtest
  • pgsql-password =password
  • pgsql-db =sbtest

Đầu tiên, tạo cơ sở dữ liệu và người dùng bên trong PostgreSQL:

$ su - postgres
$ psql
> CREATE USER sbtest WITH PASSWORD 'password';
> CREATE DATABASE sbtest;
> GRANT ALL PRIVILEGES ON DATABASE sbtest TO sbtest;

Sau đó, chỉnh sửa tệp truy cập dựa trên máy chủ lưu trữ, pg_hba.conf :

$ vim /var/lib/pgsql/9.6/data/pg_hba.conf

Và thêm dòng sau để cho phép kết nối cho sbtest người dùng, đến sbtest cơ sở dữ liệu từ tất cả các máy chủ trong mạng 192.168.55.0:

host    sbtest          sbtest          192.168.55.0/24         md5

Tải lại máy chủ để áp dụng các thay đổi:

$ /usr/pgsql-9.6/bin/pg_ctl --reload

Xác minh từ ứng dụng khách dòng lệnh psql nếu xác thực người dùng hoạt động chính xác:

$ psql -U sbtest -h 192.168.55.61 -p 5432 -d sbtest -W

Bạn sẽ có thể truy cập vào máy chủ trong cơ sở dữ liệu sbtest:

$ psql -U sbtest -h 192.168.55.61 -p 5432 -W
Password for user sbtest:
Type "help" for help.

sbtest=>

Chạy "\ q" để thoát khỏi thiết bị đầu cuối. Bây giờ chúng ta có thể khởi tạo cơ sở dữ liệu bằng cách sử dụng sysbench với lệnh sau:

$ sysbench \
--db-driver=pgsql \
--oltp-table-size=100000 \
--oltp-tables-count=24 \
--threads=1 \
--pgsql-host=192.168.55.61 \
--pgsql-port=5432 \
--pgsql-user=sbtest \
--pgsql-password=password \
--pgsql-db=sbtest \
/usr/share/sysbench/tests/include/oltp_legacy/parallel_prepare.lua \
run

Lệnh trên tạo 100.000 hàng mỗi bảng cho 24 bảng (sbtest1 đến sbtest24) bên trong cơ sở dữ liệu 'sbtest'. Tên lược đồ là "công khai" là tên mặc định. Dữ liệu được chuẩn bị bởi một tập lệnh có tên là llel_prepare.lua có sẵn trong / usr / share / sysbench / tests / include / oltp_legacy.

Xác minh các bảng đã tạo bằng lệnh sau:

$ psql -U sbtest -h 192.168.55.61 -p 5432 -W -c '\dt+\'
Password for user sbtest:
                    List of relations
 Schema |   Name   | Type  | Owner  | Size  | Description
--------+----------+-------+--------+-------+-------------
 public | sbtest1  | table | sbtest | 21 MB |
 public | sbtest10 | table | sbtest | 21 MB |
 public | sbtest11 | table | sbtest | 21 MB |
 public | sbtest12 | table | sbtest | 21 MB |
 public | sbtest13 | table | sbtest | 21 MB |
 public | sbtest14 | table | sbtest | 21 MB |
 public | sbtest15 | table | sbtest | 21 MB |
 public | sbtest16 | table | sbtest | 21 MB |
 public | sbtest17 | table | sbtest | 21 MB |
 public | sbtest18 | table | sbtest | 21 MB |
 public | sbtest19 | table | sbtest | 21 MB |
 public | sbtest2  | table | sbtest | 21 MB |
 public | sbtest20 | table | sbtest | 21 MB |
 public | sbtest21 | table | sbtest | 21 MB |
 public | sbtest22 | table | sbtest | 21 MB |
 public | sbtest23 | table | sbtest | 21 MB |
 public | sbtest24 | table | sbtest | 21 MB |
 public | sbtest3  | table | sbtest | 21 MB |
 public | sbtest4  | table | sbtest | 21 MB |
 public | sbtest5  | table | sbtest | 21 MB |
 public | sbtest6  | table | sbtest | 21 MB |
 public | sbtest7  | table | sbtest | 21 MB |
 public | sbtest8  | table | sbtest | 21 MB |
 public | sbtest9  | table | sbtest | 21 MB |
(24 rows)

Dữ liệu thử nghiệm hiện đã được tải.

Tải xuống Báo cáo chính thức hôm nay Quản lý &Tự động hóa PostgreSQL với ClusterControlTìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng PostgreSQLTải xuống Báo cáo chính thức

Tạo tải kiểm tra

Có nhiều loại khối lượng công việc cơ sở dữ liệu khác nhau mà bạn có thể thực hiện với sysbench, như được hiển thị trong các phần sau.

Tải / Đọc / Ghi

Lệnh này tương tự như phiên bản sysbench của MySQL. Các tham số tương tự có thể được sử dụng ngoại trừ các tham số liên quan đến PostgreSQL:

$ sysbench \
--db-driver=pgsql \
--report-interval=2 \
--oltp-table-size=100000 \
--oltp-tables-count=24 \
--threads=64 \
--time=60 \
--pgsql-host=192.168.55.61 \
--pgsql-port=5432 \
--pgsql-user=sbtest \
--pgsql-password=password \
--pgsql-db=sbtest \
/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua \
run

Lệnh trên sẽ tạo khối lượng công việc OLTP từ tập lệnh LUA có tên /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua, dựa trên 100.000 hàng gồm 24 bảng với 64 luồng công nhân trong 60 giây trên máy chủ 192.168.55.61 (chính ). Cứ sau 2 giây, sysbench sẽ báo cáo thống kê trung gian ( --report-khoảng =2 ).

Sau khi thực thi, bạn sẽ nhận được một cái gì đó giống như dưới đây:

sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:
Number of threads: 16
Report intermediate results every 2 second(s)
Initializing random number generator from current time

Initializing worker threads...

Threads started!

[ 2s ] thds: 64 tps: 0.00 qps: 466.69 (r/w/o: 406.55/28.33/31.81) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 4s ] thds: 64 tps: 30.55 qps: 525.38 (r/w/o: 335.56/128.72/61.10) lat (ms,95%): 3639.94 err/s: 0.00 reconn/s: 0.00
[ 6s ] thds: 64 tps: 39.55 qps: 718.41 (r/w/o: 496.13/142.68/79.60) lat (ms,95%): 4128.91 err/s: 0.00 reconn/s: 0.00
[ 8s ] thds: 64 tps: 35.98 qps: 840.95 (r/w/o: 604.11/163.89/72.95) lat (ms,95%): 2198.52 err/s: 0.50 reconn/s: 0.00
[ 10s ] thds: 64 tps: 65.57 qps: 1314.94 (r/w/o: 912.00/271.80/131.14) lat (ms,95%): 3040.14 err/s: 0.00 reconn/s: 0.00
...

Khi quá trình kiểm tra đang diễn ra, chúng tôi có thể theo dõi hoạt động của PostgreSQL bằng cách sử dụng pg_activity hoặc pg_top , để xác nhận thống kê trung gian được báo cáo bởi sysbench. Trong một thiết bị đầu cuối khác, hãy thực hiện:

$ su - postgres
$ pg_activity
 PostgreSQL 9.6.9 - postgres1.local - [email protected]:5432/postgres - Ref.: 2s
  Size:  654.62M -     7.67K/s        | TPS:          74
  Mem.:   39.10% -   382.72M/979.68M  | IO Max:     3395/s
  Swap:    0.20% -     3.57M/2.00G    | Read :      8.36M/s -   2141/s
  Load:    20.20 6.02 2.44            | Write:      2.54M/s -    650/s
                                                                   RUNNING QUERIES
PID    DATABASE              USER           CLIENT   CPU% MEM%   READ/s  WRITE/s     TIME+  W  IOW              state   Query
5130   sbtest              sbtest    192.168.55.61    1.0  2.8  791.57K    3.84K  0.788732  N    N             active   SELECT c FROM sbtest7 WHERE id BETWEEN 33195
 AND 33294
...

Cũng như luồng sao chép bằng cách xem pg_stat_replication bảng trên máy chủ chính:

$ su - postgres
$ watch -n1 'psql -xc "select * from pg_stat_replication"'
Every 1.0s: psql -xc "select * from pg_stat_replication"      Tue Jul 31 13:12:08 2018
-[ RECORD 1 ]----+------------------------------
pid              | 3792
usesysid         | 16448
usename          | slave
application_name | walreceiver
client_addr      | 192.168.55.62
client_hostname  |
client_port      | 44654
backend_start    | 2018-07-30 13:41:41.707514+08
backend_xmin     |
state            | streaming
sent_location    | 0/60933D78
write_location   | 0/60933D78
flush_location   | 0/60933D78
replay_location  | 0/60933D78
sync_priority    | 0
sync_state       | async

Lệnh "watch" ở trên chạy lệnh psql cứ sau 1 giây. Bạn sẽ thấy các cột "* _location" được cập nhật tương ứng khi xảy ra sao chép.

Khi kết thúc bài kiểm tra, bạn sẽ thấy phần tóm tắt:

SQL statistics:
    queries performed:
        read:                            67704
        write:                           19322
        other:                           9682
        total:                           96708
    transactions:                        4830   (79.34 per sec.)
    queries:                             96708  (1588.53 per sec.)
    ignored errors:                      6      (0.10 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          60.8723s
    total number of events:              4830

Latency (ms):
         min:                                    4.52
         avg:                                  799.70
         max:                                 8082.70
         95th percentile:                     2279.14
         sum:                              3862532.62

Threads fairness:
    events (avg/stddev):           75.4688/7.39
    execution time (avg/stddev):   60.3521/0.20

Bản tóm tắt ở trên cho chúng ta biết rằng máy chủ cơ sở dữ liệu PostgreSQL của chúng tôi có thể xử lý trung bình khoảng 80 giao dịch mỗi giây và khoảng 1588 truy vấn mỗi giây trong 64 luồng công nhân.

Tải chỉ đọc

Đối với kiểm tra chỉ đọc, bạn có thể sử dụng lệnh tương tự, nhưng thay đổi tập lệnh LUA thành select.lua , select_random_points.lua , select_random_ranges.lua hoặc oltp_simple.lua :

$ sysbench \
--db-driver=pgsql \
--report-interval=2 \
--oltp-table-size=100000 \
--oltp-tables-count=24 \
--threads=64 \
--time=60 \
--pgsql-host=192.168.55.62 \
--pgsql-port=5432 \
--pgsql-user=sbtest \
--pgsql-password=password \
--pgsql-db=sbtest \
/usr/share/sysbench/tests/include/oltp_legacy/select.lua \
run

Lệnh trên chạy khối lượng công việc chỉ đọc có tên là select.lua chống lại máy chủ nô lệ PostgreSQL (sao chép trực tuyến), 192.168.55.62 với 64 luồng công nhân.

Tải trọng khác

Có nhiều khối lượng công việc OLTP khác mà bạn có thể tạo bằng sysbench, như được liệt kê trong thư mục này, / usr / share / sysbench / tests / include / oltp_legacy :

$ ls -1 /usr/share/sysbench/tests/include/oltp_legacy/
bulk_insert.lua
common.lua
delete.lua
insert.lua
oltp.lua
oltp_simple.lua
parallel_prepare.lua
select.lua
select_random_points.lua
select_random_ranges.lua
update_index.lua
update_non_index.lua

Bạn có thể sử dụng lệnh tương tự và thay đổi đường dẫn đến tập lệnh LUA để tải nó lên.

Lời kết

Sử dụng sysbench, chúng tôi có thể tạo tải thử nghiệm cho máy chủ PostgreSQL của chúng tôi (cũng như cho MySQL). Lưu ý rằng điểm chuẩn tốt nhất sẽ là với dữ liệu thực và ứng dụng của bạn, nhưng điều đó có thể không phải lúc nào cũng khả thi. Nó cũng có thể là một ứng dụng mới sẽ nhanh chóng phát triển. Mặc dù tải do sysbench tạo ra có thể không mô tả khối lượng công việc OLTP trong thế giới thực của bạn, nhưng nó có thể đủ tốt.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi muốn tìm nạp dữ liệu từ các tên bảng khác nhau bằng cách sử dụng hàm postgresql

  2. Tìm tên máy chủ và cổng bằng lệnh PSQL

  3. Bạn sử dụng các biến script trong psql như thế nào?

  4. Hàm RPAD () trong PostgreSQL

  5. Django cache.set () gây ra lỗi khóa trùng lặp