對於使用 timestamp 的場景,MySQL 在訪問 timestamp 欄位時會做時區轉換,當 time_zone 設置為 system 時,MySQL 訪問每一行的 timestamp 欄位時,都會通過 libc 的時區函數,獲取 Linux 設置的時區,在這個函數中會持有mutex,當大量 ...
對於使用 timestamp 的場景,MySQL 在訪問 timestamp 欄位時會做時區轉換,當 time_zone 設置為 system 時,MySQL 訪問每一行的 timestamp 欄位時,都會通過 libc 的時區函數,獲取 Linux 設置的時區,在這個函數中會持有mutex,當大量併發SQL需要訪問 timestamp 欄位時,會出現 mutex 競爭。
MySQL 訪問每一行都會做這個時區轉換,轉換完後釋放mutex,所有等待這個 mutex 的線程全部喚醒,結果又只有一個線程會成功持有 mutex,其餘又會再次sleep,這樣就會導致 context switch 非常高但 qps 很低,系統吞吐量急劇下降。
解決辦法:設置time_zone=’+8:00’,這樣就不會訪問 Linux 系統時區,直接轉換,避免了mutex問題。
參考鏈接:
https://blog.csdn.net/shaochenshuo/article/details/51881501