第三代英特爾處理器與開源資料庫效能調優
介紹
-
MySQL 8.0.23
-
PostgreSQL 13.2
-
Ubuntu 20.04.2 LTS
-
HammerDB v4.0
-
2-socket 3rd Generation Intel® Xeon® Scalable
-
增強的效能,每個插槽最多 40 個核心,單核睿頻高達 3.7 GHz -
通過 VNNI 增強英特爾® 深度學習加速 -
更多英特爾® Ultra Path 互連 -
提高 DDR4 記憶體速度和容量,高達 6TB 系統記憶體容量(每插槽)DRAM + Intel® Optane™ Persistent Memory 200 系列 -
英特爾® 高階向量擴充套件 -
英特爾® Security Essentials 和英特爾® 資料中心安全庫 -
增強型英特爾® Speed Select 技術(英特爾 SST) -
支援英特爾® Optane™ 持久記憶體 (Pmem) 200 系列 -
英特爾® 乙太網網路介面卡 E810 系列
開源關聯式資料庫管理系統
關聯式資料庫管理系統 (RDBMS) 提供了企業軟體架構中一些最重要的基礎元件。
基於資料的關係模型,資料庫軟體使用行業標準SQL(結構化查詢語言)來定義和查詢儲存在關係中的資料。
關聯式資料庫工作負載分為兩大類,OLTP(線上事務處理)和OLAP(線上分析處理),這兩種工作負載具有相當不同的特徵。
硬體調優
從CPU核數到記憶體和儲存的速度和容量,選擇最優的計算資源大小是滿足業務需求的關鍵。第三代Intel®Xeon®可擴充套件處理器支援多達40核,多達6tb的系統記憶體,每個插槽多達8個記憶體通道。
表 1. 處理器 SKU
其他重要的問題是在哪裡儲存資料、重做日誌和預寫日誌 (WAL),以及使用哪種介質?這些問題的答案對效能有很大的影響。
CPU 配置
sudo apt-get install linux-tools-generic
sudo apt-get install cpufrequtils
sudo vi /etc/default/cpufrequtils
GOVERNOR="performance"
systemctl restart cpufrequtils
systemctl disable ondemand
/usr/lib/linux-tools/sudo ./cpupower frequency-info
analyzing CPU 0:
driver: intel_pstate
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: Cannot determine or is not supported.
hardware limits: 800 MHz - 3.40 GHz
available cpufreq governors: performance powersave
sudo ./x86_energy_perf_policy performance
磁碟 配置
sudo parted /dev/nvme1n1
print
mklabel gpt
mkpart primary 2048s 100%
print
align-check opt 1
q
sudo mkfs.xfs /dev/nvme1n1p1
sudo mkdir /data
sudo mount /dev/nvme1n1p1 /data
sudo chown -R postgres:postgres /data # for postgresql
sudo chown -R mysql:mysql /data # for mysql
軟體調優
Linux 核心優化
sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="rhgb default_hugepagesz=1G hugepagesz=1G"
sudo grub2-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg
sudo cat /proc/meminfo
接下來以 root 身份將以下行新增到 /etc/sysctl.conf,稍後我們將建立 64GB 的緩衝區(在 postgres.conf 中),因此我們通過新增 vm.nr_hugepages 建立 70GB(稍微多些)的大頁區域線。
vm.swappiness = 0
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 1048576
postgres soft memlock 100000000
postgres hard memlock 100000000
現在以root身份執行命令“sysctl –p”,當資料庫執行時,您將看到從大頁面分配的記憶體。
cat /proc/meminfo
HugePages_Total: 70
HugePages_Free: 66
HugePages_Rsvd: 62
建立的hugepage區域需要大於PostgreSQL共享緩衝區,並且不超過鎖定記憶體的限制。
-
在/etc/mysql/my.cnf 中建立一個 conf 檔案,如下文所示。
sudo vi /etc/mysql/my.cnf
[mysqld]
large-pages
skip-log-bin
datadir=/data
default_authentication_plugin=mysql_native_password
socket=/tmp/mysql.sock
port=3306
bind_address=localhost
# general
max_connections=4000
table_open_cache=8000
table_open_cache_instances=16
back_log=1500
default_password_lifetime=0
ssl=0
performance_schema=OFF
max_prepared_stmt_count=128000
skip_log_bin=1
character_set_server=latin1
collation_server=latin1_swedish_ci
transaction_isolation=REPEATABLE-READ
# files
innodb_file_per_table
innodb_log_file_size=1024M
innodb_log_files_in_group=32
innodb_open_files=4000
# buffers
innodb_buffer_pool_size=64000M
innodb_buffer_pool_instances=16
innodb_log_buffer_size=64M
# tune
innodb_page_size=8192
innodb_doublewrite=0
innodb_thread_concurrency=0
innodb_flush_log_at_trx_commit=0
innodb_max_dirty_pages_pct=90
innodb_max_dirty_pages_pct_lwm=10
join_buffer_size=32K
sort_buffer_size=32K
innodb_use_native_aio=1
innodb_stats_persistent=1
innodb_spin_wait_delay=6
innodb_max_purge_lag_delay=300000
innodb_max_purge_lag=0
innodb_flush_method=O_DIRECT_NO_FSYNC
innodb_checksum_algorithm=none
innodb_io_capacity=4000
innodb_io_capacity_max=20000
innodb_lru_scan_depth=9000
innodb_change_buffering=none
innodb_read_only=0
innodb_page_cleaners=4
innodb_undo_log_truncate=off
# perf special
innodb_adaptive_flushing=1
innodb_flush_neighbors=0
innodb_read_io_threads=16
innodb_write_io_threads=16
innodb_purge_threads=4
innodb_adaptive_hash_index=0
# monitoring
innodb_monitor_enable='%'
-
Apparmor 是 Ubuntu 上的一個安全模組,可防止應用程式執行指令碼、開啟埠、訪問和鎖定檔案等,以保護系統。在Ubuntu 上安裝 MySQL 時,Apparmor 會為 MySQL 建立一個配置檔案。 現在,如果您想更改預設“/var/lib/mysql”以外的資料目錄位置,Apparmor 將不允許 mysql 使用者訪問此資料目錄,即使您使用 chown 和 chmod 修改了對它的許可權。為了避免使用者定義目錄的訪問問題,我們可以編輯具有所需許可權的 MySQL 的 Apparmor 策略。編輯以下檔案並重新載入Apparmor。
sudo vi /etc/apparmor.d/local/usr.sbin.mysqld
/data/ r,
/data/** rwk,
-
重新載入並重新啟動 Apparmor 模組
sudo service apparmor reload
sudo service apparmor restart
sudo apt install libterm-readkey-perl libclass-dbi-perl libclass-dbi-mysql-perl
wget /archive/master.zip
mkdir innotop
mv master.zip innotop
cd innotop
unzip master.zip
cd innotop-master/
sudo perl Makefile.PL
sudo make install
sudo innotop --version
這是使用 innotop 的示例。
sudo innotop
查詢列表輸入 “Q”
initdb -D ./data --wal-segsize=1024
您可以轉到 pg_wal 目錄並列出 wal 檔案的大小。
du -hcs pg_wal/* |more
1.0G 0000000100000A0400000002
1.0G 0000000100000A0400000003
1.0G 0000000100000A0500000000
1.0G 0000000100000A0500000001
1.0G 0000000100000A0500000002
1.0G 0000000100000A0500000003
1.0G 0000000100000A0600000000
PostgreSQL 有許多其他影響效能的引數。postgresql.conf中的以下 PostgreSQL 引數 可用作參考。
cat postgresql.conf
listen_addresses = localhost # what IP address(es) to listen on;
port = 5432 # (change requires restart)
max_connections = 256 # (change requires restart)
shared_buffers = 64000MB # min 128kB
huge_pages = on # on, off, or try
temp_buffers = 4000MB # min 800kB
work_mem = 4000MB # min 64kB
maintenance_work_mem = 512MB # min 1MB
autovacuum_work_mem = -1 # min 1MB, or -1 to use maintenance_work_mem
max_stack_depth = 7MB # min 100kB
dynamic_shared_memory_type = posix # the default is the first option
max_files_per_process = 4000 # min 25
effective_io_concurrency = 32 # 1-1000; 0 disables prefetching
wal_level = minimal # minimal, archive, hot_standby, or logical
synchronous_commit = on # synchronization level;
wal_buffers = 512MB # min 32kB, -1 sets based on shared_buffers
cpu_tuple_cost = 0.03
effective_cache_size=350GB
random_page_cost = 1.1
checkpoint_timeout = 1h # range 30s-1h
checkpoint_completion_target = 0.9 # checkpoint target duration, 0.0 - 1.0
checkpoint_warning = 1
log_min_messages = error # values in order of decreasing detail:
log_min_error_statement = error # values in order of decreasing detail:
autovacuum = on # Enable autovacuum subprocess? 'on'
autovacuum_max_workers = 10
autovacuum_vacuum_cost_limit = 3000
datestyle = 'iso, dmy'
lc_messages = 'en_US.UTF-8' # locale for system error message
lc_monetary = 'en_US.UTF-8' # locale for monetary formatting
lc_numeric = 'en_US.UTF-8' # locale for number formatting
lc_time = 'en_US.UTF-8' # locale for time formatting
default_text_search_config = 'pg_catalog.english'
max_locks_per_transaction = 64 # min 10
max_pred_locks_per_transaction = 64 # min 10
archive_mode=off
max_wal_senders=0
min_wal_size=8192
max_wal_size=524288
cd postgresql-13.0/contrib
sudo make
cd postgresql-13.0/contrib/pg_stat_statements
sudo make
sudo make install
2.安裝pgsentinel
export PATH=$PATH:/usr/local/pgsql/bin
git clone .git
cd pgsentinel/src
sudo make
sudo make install
3.配置
將以下內容新增到 postgres.conf,需要重新啟動資料庫。
shared_preload_libraries = 'pg_stat_statements,pgsentinel'
# Increase the max size of the query strings Postgres records
track_activity_query_size = 2048
# Track statements generated by stored procedures as well
pg_stat_statements.track = all
4. 建立擴充套件。
postgres=# create extension pg_stat_statements;
CREATE EXTENSION
postgres=# create extension pgsentinel ;
CREATE EXTENSION
postgres=# \dx
已安裝擴充套件列表
Name | Version | Schema | Description
--------------------+---------+------------+---------------------------------------------
pg_stat_statements | 1.6 | public | track execution statistics of all SQL statements executed
pgsentinel | 1.0b | public | active session history
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
postgres=#
with ash as (
select *,ceil(extract(epoch from max(ash_time)over()-min(ash_time)over()))::numeric samples
from pg_active_session_history where ash_time>=current_timestamp - interval '2 minutes'
) select round(100*count(*)/sum(count(*)) over(), 0) as "%", round(count(*)::numeric/samples,2) as "AAS",
backend_type,wait_event_type,wait_event
from ash
group by samples,
% | AAS | backend_type | wait_event_type | wait_event
----+-------+----------------+-----------------+----------------------
48 | 28.00 | client backend | CPU | CPU
12 | 6.82 | client backend | LWLock | XactSLRU
11 | 6.18 | client backend | LWLock | WALInsert
9 | 5.41 | client backend | IPC | ProcArrayGroupUpdate
6 | 3.71 | client backend | Client | ClientRead
6 | 3.65 | client backend | IPC | XactGroupUpdate
5 | 2.82 | client backend | Lock | extend
2 | 0.94 | client backend | LWLock | ProcArray
1 | 0.35 | client backend | IPC | CheckpointDone
-
從以下連結下載“ HammerDB-4.0-Linux.tar.gz” 。
-
提取檔案
cp HammerDB-4.0-Linux.tar.gz ~/home-xvzf HammerDB-4.0-Linux.tar.gz
附錄 B – 使用 MySQL 執行 HammerDB 4.0
-
檢查 MySQL 客戶端庫是否存在。
cd /home/HammerDB-4.0
./hammedbcli
librarycheck
exit
-
下面的例子。確保 MySQL 資料庫顯示“成功”
-
但是,如果它沒有安裝。從連結下載特定於您的作業系統和 MySQL 版本的適當 libmysqlclient ((libmysqlclient-dev_8.0.23-1ubuntu20.04_amd64.deb)
https://dev.mysql.com/downloads/mysql/ 並匯出libmysqlclient存放的路徑。下面的例子:
export LD_LIBRARY_PATH=/home/mysql:$LD_LIBRARY_PATH
chmod 644 libmysqlclient.so.21
chown mysql:mysql libmysqlclient.so.21
-
要執行工作負載,我們首先需要使用 schemabuild.tcl 指令碼構建模式。此指令碼將花費大約 30 分鐘來建立資料庫,具體取決於您使用的系統和驅動器。
sudo ./hammerdbcli auto schemabuild.tcl
schemabuild.tcl
sudo vi schemabuild.tcl
puts "SETTING CONFIGURATION"
dbset db mysql
diset connection mysql_host localhost
diset connection mysql_port 3306
diset tpcc mysql_count_ware 1000
diset tpcc mysql_partition true
diset tpcc mysql_num_vu 256
diset tpcc mysql_storage_engine innodb
print dict
vuset logtotemp 1
vuset unique 1
buildschema
waittocomplete
sudo ./hammerdbcli auto mysqlrun.tcl
mysqlrun.tcl
sudo vi mysqlrun.tcl
puts "SETTING CONFIGURATION"
dbset db mysql
diset connection mysql_host localhost
diset connection mysql_port 3306
diset tpcc mysql_driver timed
diset tpcc mysql_prepared false
diset tpcc mysql_rampup 2
diset tpcc mysql_duration 5
vuset logtotemp 1
vuset unique 1
loadscript
puts "TEST STARTED"
vuset vu 64
vucreate
vurun
runtimer 500
vudestroy
puts "TEST COMPLETE"
在上面的例子中,我們模擬了 64 個併發使用者訪問資料庫。您需要調整 vuset vu 值以表示您正在測試的資料庫大小。
結果可以在指令碼末尾找到,並且還以唯一名稱記錄在 /tmp/hammerdb_*.log 中。
附錄 C – 使用 PostgreSQL 執行 HammerDB
要執行工作負載,我們首先需要使用 pgbuild.tcl 指令碼。在此示例中,這大約需要 30 分鐘,具體取決於您的系統配置。
sudo ./hammerdbcli auto pgbuild.tcl
架構構建指令碼的示例:
cat pgbuild.tcl
dbset db pg
dbset bm TPC-C
diset connection pg_host localhost
diset conection pg_port 5432
diset tpcc pg_count_ware 1000
diset tpcc pg_num_vu 180
diset tpcc pg_superuser intel
diset tpcc pg_superuserpass postgres
diset tpcc pg_storedprocs false
vuset logtotemp 1
vuset unique 1
buildschema
waittocomplete
要使用單一數量的虛擬使用者執行測試,請執行 pgtest.tcl 指令碼。
sudo ./hammerdbcli auto pgtest.tcl
測試指令碼示例:
cat pgtest.tcl
puts "SETTING CONFIGURATION"
dbset db pg
diset connection pg_host localhost
diset connection pg_port 5432
diset tpcc pg_superuser intel
diset tpcc pg_superuserpass postgres
diset tpcc pg_vacuum true
diset tpcc pg_driver timed
diset tpcc pg_rampup 2
diset tpcc pg_duration 2
diset tpcc pg_storedprocs false
vuset logtotemp 1
vuset unique 1
loadscript
puts "TEST STARTED"
vuset vu 64
vucreate
vurun
runtimer 300
vudestroy
puts "TEST COMPLETE"
結果可以在指令碼末尾找到,並且還以唯一名稱記錄在 /tmp/hammerdb_*.log 中。
Vuser 1:64 配置的活動虛擬使用者
Vuser 1:測試結果:系統從 3515684 PostgreSQL TPM 達到 1483849 NOPM
===================================
文章來源:
https://www.intel.com/content/www/us/en/developer/articles/guide/open-source-database-tuning-guide-on-xeon-systems.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69998444/viewspace-2854662/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spark 效能調優--資源調優Spark
- HBase資料庫效能調優OW資料庫
- 兩個第三代處理器的故事:AMD和英特爾
- 掌握Oracle資料庫效能調優方法Oracle資料庫
- 資料庫效能調優設計方案資料庫
- Oracle資料庫 Exp/Imp工具效能調優Oracle資料庫
- 影像處理開源資料集
- 資料庫效能調優之始: analyze統計資訊資料庫
- 資料庫調優資料庫
- 英特爾處理器效能排行 英特爾cpu天梯圖2022
- 開源|效能優化利器:資料庫稽核平臺Themis的選型與實踐優化資料庫
- 資料庫優化之表碎片處理資料庫優化
- 英特爾與 Facebook 合作採用第三代英特爾® 至強® 可擴充套件處理器和支援 BFloat16 加速的英特爾® 深度學習加速技術,提高 PyTorch 效能套件深度學習PyTorch
- Intel第三代新品Core i3-3240處理器效能評測Intel
- 【效能調優】效能測試、分析與調優基礎
- 資料庫例項效能調優利器:Performance Insights資料庫ORM
- 資料庫的效能調優:如何正確的使用索引?資料庫索引
- 效能調優-Mysql索引資料結構詳解與索引優化MySql索引資料結構優化
- 資料庫效能優化資料庫優化
- Linux伺服器效能分析與調優Linux伺服器
- 一次OWB資料庫效能問題處理資料庫
- Oracle資料庫效能調整 - 建議器 ADVICEOracle資料庫
- 資料庫效能優化-索引與sql相關優化資料庫優化索引SQL
- oracle資料庫調優描述Oracle資料庫
- 處理器架構資源整理架構
- 【效能優化】ORACLE資料庫效能優化概述優化Oracle資料庫
- 超級連載!探索第三代英特爾至強可擴充套件處理器的秘密套件
- 【調優】從吞吐量角度提升資料庫整體效能資料庫
- 資料庫伺服器記憶體資源消耗100%問題處理案例資料庫伺服器記憶體
- mongodb核心原始碼實現、效能調優系列-為何要對開源mongodb資料庫核心做二次開發MongoDB原始碼資料庫
- oracle資料庫的效能調整Oracle資料庫
- Nginx安全優化與效能調優Nginx優化
- 單機每秒最多可處理10億條資料!eBay開源資料處理框架Accelerator框架
- 資料庫效能優化2資料庫優化
- Oracle資料庫效能優化Oracle資料庫優化
- 為資料庫效能調優插上 AI 的翅膀 | 調優測試框架 Matrix 團隊訪談資料庫AI框架
- 加固高效能異構資料處理伺服器伺服器
- 如何對分散式 NewSQL 資料庫 TiDB 進行效能調優分散式SQL資料庫TiDB