Mô hình deploy benchmark:
Lưu ý:
- Topology lý tưởng là 3 cụm, mỗi cụm có 1 TiDB server, 1 PD server và 1 TiKV server.
- Số lượng connection chạy đồng thời tới cụm TiDB không nên quá 500.
Linux OS platform | Version |
---|---|
CentOS Linux | 7.7.1908 |
Component | CPU | Memory | Disk type | Instance Number |
---|---|---|---|---|
TiDB | 32vCPU | 64 GB | HDD | 3 (10.20.11.56-57-58) |
PD | 32vCPU | 64 GB | SSD | 3 (10.20.11.56-54-55) |
TiKV | 32vCPU | 64 GB | SSD | 4 (10.20.11.56-54-55-56) |
Lưu ý:
- Instance của TiDB và PD có thể được deploy chung trên 1 server.
- Đối với TiKV server, nên sử dụng NVWe SSDs để đảm bảo tốc độ đọc/ghi nhanh.
- Không có yêu cầu đặc biệt với loại đĩa, dung lượng cho storage của TiDB server vì nó chỉ dùng để lưu server logs.
- Giả sử server test có 32 bảng, mỗi bảng có hơn 10 triệu dòng thì kích thước đĩa cho TiKV server nên lớn hơn 512 GB.
- Nên giữ kích thước đĩa của TiKV trong khoảng 2TB nếu dùng PCIe SSDs hay 1.5TB nếu dùng SSDs thông thường.
- Xem file config mặc định của TiBD ở đây.
- Đặt log level cao nhất để tăng performance cho TiDB. Giá trị default là info.
- Một số flag có thể tunning:
Type | Default | Description |
---|---|---|
enabled | false | Bật prepared plan cache để giảm chi phí khi thực hiện tối ưu execution plan. |
capacity | 100 | Số lượng cached statements |
memory-guard-ratio | 0.1 | Ngăn chặn performance.max-memory vượt ngưỡngGiá trị min là 0, max là 1 |
oom-action | log | Khi thực hiện SQL query vượt ngưỡng memory cho phép: - oom-action="log": sẽ chỉ in ra log. - oom-action="cancel: in ra log và huỷ thực hiện SQL query. |
max-server-connections | 0 | maximum số lượng client connection đồng thời tới TiDB. Mặc định là không giới hạn. |
Type | Default | Description |
---|---|---|
max-procs | 0 | Số lượng CPUs. Nếu dùng giá trị 0 , mặc định sử dụng tất cả CPUs trên machine. |
max-memory | 0 | maximum memory cho Prepared Least Recently Used (LRU) cache Phải bật prepared-plan-cached mới dùng config này |
run-auto-analyze | true | Config cho TiDB thực hiện phân tích tự động |
tcp-keep-alive | false | enable keepalive connection với TiDB |
stats-lease | 3s | Định kì reloading statistics, update số lượng row của table, kiểm tra có cần chạy automatic analysis. |
run-auto-analyze | true | enable thực thi automatic analysis. |
Type | Default | Description |
---|---|---|
grpc-connection-count | 16 | maximum số lượng connection established với TiKV. |
grpc-keepalive-time | 10 (second) | Thời gian giữ kết nối RPC giữa TiDB và TiKV. Nếu không có request từ TiDB tới TikV, TiDB sẽ gửi ping xuống TiKV. |
grpc-keepalive-timeout | 3 (second) | Timeout RPC keepalive giữa TiDB và TiKV |
Chi tiết thêm xem tại đây
-
File config mặc định nằm ở
etc/config-template.toml
. Muốn kích hoạt, ta cần đổi tên thànhconfig.toml
-
Đối với Sysbench test, tỉ lệ Default Column Families so với Write Column Families là hằng số: 4 : 1 Ví dụ deploy TiKV trên máy 40GB:
log-level = "error"
[raftstore]
sync-log = false
[rocksdb.defaultcf]
block-cache-size = "24GB"
[rocksdb.writecf]
block-cache-size = "6GB"
Type | Default | Description |
---|---|---|
capacity | 100 | Số lượng cached statements |
memory-guard-ratio | 0.1 | Ngăn chặn performance.max-memory vượt ngưỡngGiá trị min là 0, max là 1 |
Type | Default | Description |
---|---|---|
max-procs | 0 | Số lượng CPUs. Nếu dùng giá trị 0 , mặc định sử dụng tất cả CPUs trên machine. |
max-memory | 0 | maximum memory cho Prepared Least Recently Used (LRU) cache Phải bật prepared-plan-cached mới dùng config này |
stat-lease | 3s | Time interval để reload các thống kê. |
run-auto-analyze | true | Config cho TiDB thực hiện phân tích tự động |
Type | Default | Description |
---|---|---|
enanled | false | Phát hiện transaction conflict để giảm số lần retry của transaction commits gây ra bởi write conflicts. |
Chi tiết thêm xem tại đây
- Một số flags có thể tunning:
Parameter | Default | Description |
---|---|---|
shared | true | Kích hoạt sharing block cache |
capacity | 45% tổng memory | Kích thước cho shared block cache |
Parameter | Default | Description |
---|---|---|
block-cache-size | Total memory machine / 4 | Cache size cho RocksDB block |
disable-block-cache | fasle | enable or disable block cache. |
Parameter | Default | Description |
---|---|---|
block-cache-size | Total machine memory * 15% | Kích thước size của CF write |
Chi tiết xem thêm tại đây
Parameter | Default | Description |
---|---|---|
max-merge-region-size | 20 | Megre regions với region bên cạnh khi region size nhỏ hơn giá trị được set |
max-merge-region-keys | 200000 | Megre Regions với Region bên cạnh khi Region key nhỏ hơn giá trị được set |
merge-schedule-limit | 8 | Số lượng scheduling tasks cho Region Merge thực hiện đồng thời |
max-replicas | 3 | Số lượng replicas. |
Số lượng lớn Region trên một TiKV instance ảnh hưởng lớn đến performance. Do đó, ta có giải quyết điều đó bằng một trong hai hướng:
- Giảm số lượng Regions trên một TiKV instance.
- Giảm số lượng messsage đến cho một Region.
Mặc định, raftstore.store-pool-size
đặt là 2
. Ta có thể tăng giá trị này để tránh bottleneck cho Raftstore nhưng không tăng quá cao để tránh thread switching.
Sau khi drop data hay thực hiện Drop Table
hay Truncate Table
, ta có thể merge các Region nhỏ hay thậm chí Region trống để giảm chi phí tiêu thụ.
Tuy nhiên, chức năng này được bật tự động kể từ phiên bản 3.0
Các parameters liên quan đến config cho region merge xem ở mục 3.3
Ta có thể tăng số lượng TiKV instance trên 1 machine hay tăng số lượng machine trong một cụm.
Đây là hướng giảm message đến tới một Region. Tham số này là sau mỗi khoảng thời gian nhất định, Raftstore gửi messsage tới Raft state machine của mỗi Region. Tăng giá trị này sẽ làm giảm số lượng message đến Region nhưng tốn nhiều thời gian hơn để detect leader failure.
[raftstore]
raft-base-tick-interval = "2s"
TiDB hỗ trợ tính năng Split Region:
SPLIT TABLE table_name [INDEX index_name] BETWEEN (lower_value) AND (upper_value) REGIONS region_num
Có thể check lại Region distribution sử dụng script table-regions.py
:
python table-regions.py --host DB_HOST --port DB_PORT DB_NAME TABLE_NAME
Software and Hardware Recommendations
How to Test TiDB Using Sysbench
Building, Running, and Benchmarking TiKV and TiDB