mysql配置調(diào)優(yōu)是數(shù)據(jù)庫專業(yè)人員和管理員實施的數(shù)據(jù)庫管理的重要組成部分。它的目的是配置數(shù)據(jù)庫以適應(yīng)其硬件和工作負(fù)載。但在數(shù)據(jù)庫管理領(lǐng)域之外,mysql 配置調(diào)優(yōu)的用處很大程度上被忽視了。
我們假設(shè) mysql 調(diào)優(yōu)可以顯著影響 web 應(yīng)用程序的性能。如果我們能夠展示mysql調(diào)優(yōu)的價值,我們相信企業(yè)和組織可能會熱衷于更大規(guī)模地結(jié)合這種實踐。
如何提高 laravel 應(yīng)用程序性能
通過調(diào)優(yōu)提高應(yīng)用程序性能最好通過解決以下領(lǐng)域的綜合方法來實現(xiàn):
服務(wù)器資源 – cpu、內(nèi)存、存儲
軟件配置 – linux、nginx、php…
數(shù)據(jù)庫管理系統(tǒng)(dbms)配置 – mysql、postgresql
優(yōu)化數(shù)據(jù)庫方案并更改索引
優(yōu)化應(yīng)用程序 – 代碼、查詢、架構(gòu)……
許多經(jīng)驗豐富的開發(fā)人員并不將數(shù)據(jù)庫性能調(diào)優(yōu)視為提高應(yīng)用程序性能的機會,因為他們對此領(lǐng)域知之甚少。他們花費了大量時間來優(yōu)化代碼庫,但已經(jīng)達(dá)到了這樣的地步:不再為投入的時間和精力帶來有價值的結(jié)果。我們對 mysql 調(diào)優(yōu)如何對流行開源 web 應(yīng)用程序的性能產(chǎn)生積極影響的研究旨在向開發(fā)人員展示這一事實。
測試方法
我們對 laravel aimeos 的測試程序讓我們可以使用種子數(shù)據(jù)來比較配置前后應(yīng)用程序的性能。通過首先使用默認(rèn)配置運行測試,我們獲得了有價值的控制結(jié)果來與調(diào)整后的配置進(jìn)行比較。
我們使用以下流程來準(zhǔn)備和測試每個應(yīng)用程序:
-
部署 laravel aimeos。
帶有數(shù)據(jù)的種子數(shù)據(jù)庫。
為 jmeter 準(zhǔn)備測試。
運行測試 10 分鐘 – 使用 blazemeter 性能測試平臺進(jìn)行 jmeter 測試。
調(diào)整 mariadb 配置 – 默認(rèn)配置測試后,我們的設(shè)置保持不變,但 mariadb 針對工作負(fù)載、服務(wù)器資源和數(shù)據(jù)庫大小進(jìn)行了調(diào)整。
重新運行測試 – 使用 blazemeter 重復(fù) jmeter 測試以調(diào)整配置。
測試期間我們在 github 上發(fā)布了 jmeter 測試、mysql 狀態(tài)和 mysql 變量。
我們查看了哪些指標(biāo)?
我們在本研究中查看的指標(biāo)是:
響應(yīng)時間(延遲)是發(fā)送請求并在服務(wù)器端處理請求到客戶端收到第一個字節(jié)之間的時間。這是讓您深入了解服務(wù)器性能的重要指標(biāo)。
每秒查詢數(shù) 是衡量數(shù)據(jù)庫服務(wù)器每秒執(zhí)行多少查詢的指標(biāo)。
cpu 利用率.
我們收集了cpu 利用率 和每秒查詢數(shù) 指標(biāo)來比較工作負(fù)載。
laravel 艾梅奧斯
aimeos laravel 是一個流行的電子商務(wù) web 應(yīng)用程序框架,用于創(chuàng)建在線商店、市場和 b2b 應(yīng)用程序。借助 aimeos,用戶可以為 laravel 創(chuàng)建 api 優(yōu)先的電子商務(wù)商店,該商店可以擴展以支持超過 10 億種商品。它有 30 多種語言版本,安裝量超過 300,000 次。
測試設(shè)置
為了測試 aimeos,我們以 10 個用戶開始測試,但由于默認(rèn)配置無法完成測試,我們不得不減少用戶數(shù)量。
我們在數(shù)據(jù)庫中植入了 500 mb 數(shù)據(jù)。
我們的測試時間是10分鐘。
我們使用:
安裝了 debian 11 作為操作系統(tǒng)的 aws ec2 實例 c5.xlarge,
apache 作為網(wǎng)絡(luò)服務(wù)器,
mariadb 10.5 設(shè)置為默認(rèn)配置,數(shù)據(jù)庫大小 500 mb。
mysql配置
aimeos laravel 使用的配置如下:
laravel aimeos 500mb 的調(diào)整配置
query_cache_type=1 query_cache_size=134217728 query_cache_limit=16777216 query_cache_min_res_unit=4096 thread_cache_size=0 key_buffer_size=8388608 max_allowed_packet=1073741824 sort_buffer_size=2097152 read_rnd_buffer_size=262144 bulk_insert_buffer_size=8388608 myisam_sort_buffer_size=8388608 innodb_buffer_pool_chunk_size=134217728 innodb_buffer_pool_size=805306368 max_heap_table_size=16777216 tmp_table_size=16777216 join_buffer_size=8388608 max_connections=151 table_open_cache=2048 table_definition_cache=1408 innodb_flush_log_at_trx_commit=1 innodb_log_file_size=201326592 innodb_log_buffer_size=16777216 innodb_write_io_threads=4 innodb_read_io_threads=4 innodb_file_per_table=1 innodb_flush_method=O_DIRECT innodb_thread_concurrency=0 innodb_purge_threads=4 optimizer_search_depth=0 thread_handling=pool-of-threads thread_pool_size=2
登錄后復(fù)制
測試結(jié)果
aimeos laravel 測試結(jié)果展示了默認(rèn)配置和調(diào)整配置之間的顯著性能改進(jìn)。
mysql 的優(yōu)化導(dǎo)致平均服務(wù)器響應(yīng)時間顯著改善,從 1.4 秒減少到 800 毫秒以下。
響應(yīng)時間(延遲)下降了 42%,平均cpu 利用率下降了 86%,而每秒查詢數(shù)增加了令人難以置信的 291%,從每秒 12 個查詢增加到 35 個查詢。
結(jié)果圖表如下:
響應(yīng)時間(毫秒),aimeos 調(diào)整 mysql 配置與默認(rèn)值
cpu 利用率 (%),aimeos 調(diào)整 mysql 配置與默認(rèn)值
每秒查詢數(shù),aimeos 調(diào)整 mysql 配置與默認(rèn)值
社區(qū)貢獻(xiàn)者
我們與 initlab 公司的 laravel 開發(fā)者 gevorg mkrtchyan 和 sergey sinitsa 合作調(diào)查了這一問題,非常感謝他們的專業(yè)知識。
sergey 部署了 aimeos,gevorg 準(zhǔn)備了用于播種數(shù)據(jù)庫的代碼。
結(jié)論
我們使用 aimeos laravel 的測試程序在配置數(shù)據(jù)庫服務(wù)器配置后,在
響應(yīng)時間(延遲)、cpu 利用率和每秒查詢數(shù)方面顯示出顯著的改進(jìn)。
響應(yīng)時間(延遲)下降了 42%,而cpu 利用率下降了 86%。 aimeos laravel 500mb 中的每秒查詢次數(shù) 增加了 291%。
總之,mysql 調(diào)優(yōu)是數(shù)據(jù)庫管理的一個重要方面,可以對 laravel 應(yīng)用程序的性能產(chǎn)生重大影響。性能不佳的 web 應(yīng)用程序可能會導(dǎo)致頁面加載時間增加、請求處理緩慢以及用戶體驗不佳,從而對 seo 和銷售產(chǎn)生負(fù)面影響。通過使用 mysql 調(diào)優(yōu)優(yōu)化 web 應(yīng)用程序的性能,企業(yè)和組織可以提高銷售額、瀏覽量、轉(zhuǎn)化率和 seo 排名。
通過這項研究,我們希望展示 mysql 調(diào)優(yōu)作為提高 laravel 應(yīng)用程序性能的一種手段的價值,并鼓勵 laravel 開發(fā)人員在優(yōu)化應(yīng)用程序性能時考慮這種做法。
使用 releem 等工具,可以自動配置數(shù)據(jù)庫以獲得最佳性能,減輕軟件開發(fā)團隊的負(fù)擔(dān)。