MySQL連線最佳化主要指客戶端連接資料庫以及資料庫為回應客戶端的請求而開啟資料表和索引的過程中涉及到的參數調整。下面我們來詳細的探討下
上文MySQL優化之快取優化這篇文章中提到了一個很重要的概念,就是show variables是用來表示系統編譯或設定在my.cnf中的變數值。而show status則稱為狀態值,顯示的是目前服務實例運行所具有的狀態訊息,是一個動態改變的值。因此常用來觀測目前MySQl的運作是否正常,如果不正常那麼依賴調整靜態參數來提高MySQL的效能。所以明白這兩個概念的不同,是後面調優的基礎。
MySQL 連線最佳化
記得有一次在公司內部連線MySQL的時候,總是連不上。找到DBA後,經過檢驗原因,是目前MySQL連線數滿了,經過調整後,解決了問題。引發連線數過多的錯誤原因通常有兩個,第一的確是有很多人在連接MySQL,造成連線數用完。第二種是max_connections值太小。
1、連線參數(show variables)
mysql> show variables like '%connect%'; +-----------------------------------------------+-----------------+ | Variable_name | Value | +-----------------------------------------------+-----------------+ | character_set_connection | utf8 | | collation_connection | utf8_general_ci | | connect_timeout | 10 | | disconnect_on_expired_password | ON | | init_connect | | | max_connect_errors | 100 | | max_connections | 151 | | max_user_connections | 0 | | performance_schema_session_connect_attrs_size | 512 | +-----------------------------------------------+-----------------+
max_connections
是指MySQL服務實例能夠同時接受的的最大並發連線數。 MySQL其實支援最大連線數加一的演算法,保障當連線數用完的時候,超級管理員依然可以和服務端建立連接,進行管理。
max_user_connections
設定指定帳號的最大並發連線數。
max_connect_errors
當某台非法主機惡意連線MySQL服務端,遭到的錯誤達到設定值後,MySQL會解決來自該主機的所有連線。但執行flush hosts後會清除。
2、連線狀態(show status)
有一點要注意的,變數值(show variables)是以小寫字母開頭的,而狀態值(show status)是以大寫字母開頭。這樣區分有助於記憶和分類
mysql> show status like '%connections%'; +-----------------------------------+-------+ | Variable_name | Value | +-----------------------------------+-------+ | Connection_errors_max_connections | 0 | | Connections | 197 | | Max_used_connections | 2 | +-----------------------------------+-------+
Connection_errors_max_connections
當MySQL的最大並發數大於系統變數(show variables)中max_connections的最大並發數,因此而被拒絕的次數,將會記錄在這個變數裡。如果Connection_error_max_connections值比較大,則表示目前系統並發比較高,要考慮調大max_connections的值。
Connections
表示MySQL從啟動至今,成功建立連線的連線數,這個值是不斷累積的。
Max_used_connections表示MySQL從啟動至今,同一時刻並發的連線數,取得是最大值。如果這個值大於 max_connections則表示系統經常處於高並發的狀態,應該考慮調大最大並發連線數。
3、連接線程參數(thread variabls and status)
mysql> show variables like 'thread%'; +--------------------+---------------------------+ | Variable_name | Value | +--------------------+---------------------------+ | thread_cache_size | 9 | | thread_concurrency | 10 | | thread_handling | one-thread-per-connection | | thread_stack | 262144 | +--------------------+---------------------------+
thread_cache_size
設定連接線程緩存的數目。這個快取相當於MySQL執行緒的快取池(thread cache pool),將空閒的連線執行緒放入連線池中快取起來,而非立即銷毀。當有新的連接請求時,如果連接池中有空閒的連接,則直接使用。否則要重新建立線程。創建線程是一個不小的系統開銷。 MySQL的這部分線程處理和Nginx 的線程處理有異曲同工之妙,以後介紹Nginx的線程處理時,會拿來做對比。
thread_handling
預設值是: one-thread-per-connection 表示為每個連線提供或建立一個執行緒來處理請求,直到請求完畢,連線銷毀或存入快取池。當值是no-threads 時,表示在總是只提供一個執行緒來處理連接,一般是單機做測試使用的。
thread_stack stack
是堆的意思,由PHP 進程詳解這篇博客,知道進程和線程都是有唯一的ID的,進程的ID系統會維護,二線程的ID ,則由具體的線程庫區維護,當進程或者線程休眠的時候,進程的上下文信息要在內存中開闢出一塊區域,保存進程的上下文信息,以便於迅速喚醒程序。預設為MySQL的每個執行緒設定的堆疊大小為:262144/1024=256k
查看執行緒狀態資訊
mysql> show status like 'Thread%'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_cached | 1 | | Threads_connected | 1 | | Threads_created | 2 | | Threads_running | 1 | +-------------------+-------+
Thread_cached
目前執行緒池的執行緒數
Thread_connected
目前的連線數
Thread_cached
: 当前连接线程创建数, 如果这个值过高,可以调整threadcachesize 也就是调整线程缓存池的大小。
Thred_runnint
: 当前活跃的线程数。
连接请求堆栈
MySQL在很短的时间内,突然收到很多的连接请求时,MySQL会将不能来得及处理的连接请求保存在堆栈中,以便MySQL后续处理。back_log参数设置了堆栈的大小,可以通过如下命令查看:
mysql> show variables like 'back_log'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | back_log | 80 | +---------------+-------+
连接异常
mysql> show status like 'Aborted%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Aborted_clients | 0 | | Aborted_connects | 219 | +------------------+-------+
Aborted_clients
MySQL 客户机被异常关闭的次数。
Aborted_connects
试图连接到MySQL服务器而失败的连接次数。
other
mysql> show status like 'Slow%'; +---------------------+-------+ | Variable_name | Value | +---------------------+-------+ | Slow_launch_threads | 0 | | Slow_queries | 0 | +---------------------+-------+
mysql> show variables like 'slow_launch_time'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | slow_launch_time | 2 | +------------------+-------+
Slow_lunch_threads 创建线程的时间过长,超过slow_launch_time的设定值,则会记录。
可以通过使用 Connection_error%来查看连接的错误状态信息:
mysql> show status like 'Connection_error%'; +-----------------------------------+-------+ | Variable_name | Value | +-----------------------------------+-------+ | Connection_errors_accept | 0 | | Connection_errors_internal | 0 | | Connection_errors_max_connections | 0 | | Connection_errors_peer_address | 0 | | Connection_errors_select | 0 | | Connection_errors_tcpwrap | 0 | +-----------------------------------+-------+
Connection_errors_peer_address 查找MySQL客户机IP地址是发生的错误数。
以上是MySQL優化之連接優化範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

EXPLAIN命令的關鍵指標包括type、key、rows和Extra。 1)type反映查詢的訪問類型,值越高效率越高,如const優於ALL。 2)key顯示使用的索引,NULL表示無索引。 3)rows預估掃描行數,影響查詢性能。 4)Extra提供額外信息,如Usingfilesort提示需要優化。

Usingtemporary在MySQL查詢中表示需要創建臨時表,常見於使用DISTINCT、GROUPBY或非索引列的ORDERBY。可以通過優化索引和重寫查詢避免其出現,提升查詢性能。具體來說,Usingtemporary出現在EXPLAIN輸出中時,意味著MySQL需要創建臨時表來處理查詢。這通常發生在以下情況:1)使用DISTINCT或GROUPBY時進行去重或分組;2)ORDERBY包含非索引列時進行排序;3)使用複雜的子查詢或聯接操作。優化方法包括:1)為ORDERBY和GROUPB

MySQL/InnoDB支持四種事務隔離級別:ReadUncommitted、ReadCommitted、RepeatableRead和Serializable。 1.ReadUncommitted允許讀取未提交數據,可能導致臟讀。 2.ReadCommitted避免臟讀,但可能發生不可重複讀。 3.RepeatableRead是默認級別,避免臟讀和不可重複讀,但可能發生幻讀。 4.Serializable避免所有並發問題,但降低並發性。選擇合適的隔離級別需平衡數據一致性和性能需求。

MySQL適合Web應用和內容管理系統,因其開源、高性能和易用性而受歡迎。 1)與PostgreSQL相比,MySQL在簡單查詢和高並發讀操作上表現更好。 2)相較Oracle,MySQL因開源和低成本更受中小企業青睞。 3)對比MicrosoftSQLServer,MySQL更適合跨平台應用。 4)與MongoDB不同,MySQL更適用於結構化數據和事務處理。

MySQL索引基数对查询性能有显著影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。

MySQL學習路徑包括基礎知識、核心概念、使用示例和優化技巧。 1)了解表、行、列、SQL查詢等基礎概念。 2)學習MySQL的定義、工作原理和優勢。 3)掌握基本CRUD操作和高級用法,如索引和存儲過程。 4)熟悉常見錯誤調試和性能優化建議,如合理使用索引和優化查詢。通過這些步驟,你將全面掌握MySQL的使用和優化。

MySQL在現實世界的應用包括基礎數據庫設計和復雜查詢優化。 1)基本用法:用於存儲和管理用戶數據,如插入、查詢、更新和刪除用戶信息。 2)高級用法:處理複雜業務邏輯,如電子商務平台的訂單和庫存管理。 3)性能優化:通過合理使用索引、分區表和查詢緩存來提升性能。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Linux新版
SublimeText3 Linux最新版

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

WebStorm Mac版
好用的JavaScript開發工具