日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

設置連接池

如果您的應用連接創建頻繁(例如短連接場景)或者連接數量很大(大于MySQL數據庫的連接數限制),您可以參考本文使用合適的RDS MySQL數據庫代理連接池,降低應用與數據庫建立連接的頻率來減少MySQL數據庫主線程的開銷,減少數據庫上的總連接數。

關于RDS數據庫代理的使用問題和更多相關信息,歡迎加入用戶釘釘群(106730000316)進行咨詢、反饋和交流 。

選擇連接池

RDS MySQL數據庫代理連接池分為事務級連接池和會話級連接池,您可以按照實際使用場景選擇是否使用連接池,以及使用連接池的類型:

連接池類型

使用場景

事務級連接池(推薦)

  • 業務側多為短連接

  • 連接創建頻繁

  • 連接數量很大(大于MySQL數據庫的連接數限制)

以上場景下,業務不涉及事務級連接池的使用限制,建議優先選擇事務級連接池。

會話級連接池

  • 業務側多為短連接

  • 連接創建頻繁

以上場景下,業務受到事務級連接池的使用限制而無法使用事務級連接池,可使用會話級連接池。

不使用連接池

  • 業務側多為長連接

  • 連接數量很少

  • 業務側已經使用了連接池(例如:Druid、DBCP、C3P0、HikariCP等)

連接池類型介紹

會話級連接池

應用場景

  • 業務側多為短連接

  • 連接創建頻繁

以上場景下,業務受到事務級連接池的使用限制而無法使用事務級連接池,可使用會話級連接池。

作用

降低應用與數據庫建立連接的頻率來減少MySQL數據庫主線程的開銷。

工作原理

前端連接與后端連接

在客戶端(應用)與數據庫建立連接時,以數據庫代理為中間節點可將該連接分為前端連接(客戶端與數據庫代理的連接)和后端連接(數據庫代理與數據庫的連接)。如下圖所示。

image

未開啟連接池時的連接建立過程

未開啟連接池時,每條由客戶端發起的會話都需要創建前端連接和后端連接。會話結束后,前端連接和后端連接均斷開,等到下次客戶端發起會話請求時,再重新創建新的前端連接和后端連接。如下圖所示。

image

使用這種建立連接的方式,每次會話都要重新建立后端連接,對數據庫的主線程的開銷較大。

會話級連接池工作原理

對于會話級連接池,當客戶端發起的會話建立連接時,先建立前端連接,然后判斷連接池中是否存在可用的后端連接:

說明

判斷是否為可用連接的條件:user、clientip和dbname等參數值是否一致。

  • 若存在,則直接使用。

  • 若不存在,則與數據庫建立新的后端連接。

會話結束后,前端連接斷開,后端連接放入連接池,待新的會話建立連接時,可直接使用該后端連接。

這樣,就降低了數據庫代理與數據庫建立連接的頻率,從而減少了數據庫主線程的開銷。

連接建立的流程如下圖所示。

image

對于會話級連接池,一個會話需要占用一個后端連接,直到會話結束才會釋放后端連接到連接池,如下圖所示。

image

使用限制

無。

注意事項

對于會話級連接池,在一個會話未結束之前,即便該會話處于閑置狀態,沒有事務需要處理,其后端連接也不能為其他會話使用,所以不能減少數據庫的總連接數。

事務級連接池(推薦)

應用場景

  • 業務側多為短連接

  • 連接創建頻繁

  • 連接數量很大(大于MySQL數據庫的連接數限制)

以上場景下,業務不涉及事務級連接池的使用限制,建議優先選擇事務級連接池。

作用

  • 降低應用與數據庫建立連接的頻率來減少MySQL數據庫主線程的開銷。

  • 減少數據庫上的總連接數。

工作原理

開啟事務級連接池后,當客戶端發起連接會話請求時,只會先與數據庫代理建立前端連接,代理不會馬上將其與后端數據庫建立連接;當需要處理請求時,從事務級連接池里查找是否存在可用的后端連接:

說明

判斷是否為可用后端連接的條件:user、dbname和部分系統變量的參數值是否一致。

  • 若存在,則從連接池里直接獲取后端并使用,并在當前事務結束后將該連接放回事務級連接池,方便下個請求繼續使用。

  • 若不存在,代理會與數據庫創建一個新的后端連接。

對于事務級連接池,在一段時間內,多個會話可共用一個后端連接。如下圖所示,事務活躍的連接會占用后端連接,事務非活躍的連接不會占用后端連接。

image

這樣,在一段時間內,同一個后端連接,就可以處理多個進行中的會話的事務處理請求,可以帶來以下好處:

  • 減少與數據庫建立連接的頻率

    后端連接在一段時間內與數據庫并沒有斷開,能夠減少與數據庫建立連接的頻率,從而減少數據庫主線程的開銷。

  • 減少與數據庫的總連接數

    多個進行中的會話共用了一個后端連接,避免了閑置連接(會話未結束,但前端連接為非活躍狀態)對后端連接資源的占用,減少了數據庫上的總連接數。

說明

數據庫代理本身并沒有最大連接數的限制,連接數的限制是由后端數據庫的規格決定。

使用限制

  • 執行以下操作時,連接將被鎖定直至連接結束(即該連接不會再被放到連接池里供其他用戶連接使用):

    • 執行PREPARE語句或命令。

    • 創建臨時表。

    • 修改用戶變量。

    • 大報文(例如16 MB以上)。

    • 使用LOCK TABLE。

    • 多語句。

    • 存儲過程調用。

  • 不支持FOUND_ROWS、ROW_COUNT和LAST_INSERT_ID函數的調用,這些函數可以調用成功,但是無法保證調用結果的正確性。其中:

    • 1.13.11及以上的數據庫代理版本支持在SELECT SQL_CALC_FOUND_ROWS * FROM t1 LIMIT *語句后直接使用SELECT FOUND_ROWS()命令。但MySQL官方已不推薦該用法,建議您將SELECT FOUND_ROWS()替換為SELECT COUNT(*) FROM tb1進行查詢,詳情請參見FOUND_ROWS()

    • 1.13.11及以上的數據庫代理版本支持在INSERT后直接使用SELECT LAST_INSERT_ID()語句,來保證查詢結果正確性。

注意事項

  • 對于設置了wait_timeout的連接,wait_timeout在客戶端的表現可能不會生效,因為每次請求都會從連接池中獲取連接,當wait_timeout超時后,只有連接池中的后端連接會斷開,而后端連接斷開并不會導致客戶端連接斷開。

  • 除了sql_mode、character_set_servercollation_servertime_zone這四個變量以外,如果業務依賴其他session級別的系統變量,那么需要客戶端在建連之后顯式執行set語句,否則連接池可能會復用系統變量已經被更改過的連接。

  • 由于連接可能會被復用,您可以使用select connection_id()查詢當前連接的thread id。

  • 由于連接可能會被復用,所以show processlist或者SQL洞察顯示的IP地址和端口可能和客戶端實際的IP地址和端口不一致。

  • 數據庫代理會將所有節點上的show processlist結果合并后返回,在事務級連接池開啟后,前端連接和后端連接的thread id無法對應。這導致kill命令可能會報錯,但是實際上kill命令已經正常執行成功,可再通過show processlist確定相應的連接是否斷開。

設置連接池

前提條件

已開通數據庫代理

注意事項

  • 當前連接池功能不支持同一個賬號對不同IP有不同的權限。如果您為同一個賬號的不同IP設置了不同的庫或者表權限,開通連接池可能會導致權限錯誤問題。例如,user@192.xx.xx.1設置了database_a的權限,而user@192.xx.xx.2沒有database_a的權限,可能會導致連接復用時權限出錯。

  • 本文介紹的連接池功能是指RDS MySQL數據庫代理的連接池功能,不影響客戶端的連接池功能,如果您的客戶端已經支持連接池,則可以不使用數據庫代理的連接池功能。

  • 連接池不能解決由于存在大量慢SQL,導致的連接堆積問題,建議自行優化SQL,或者在MySQL側排查慢的原因。

  • 當數據庫代理內核小版本低于2.9.1時,讀寫屬性為只讀的連接地址不支持設置連接池。當數據庫代理內核小版本為2.9.1及以上時,讀寫屬性為讀寫和只讀的連接地址均支持設置連接池。

操作步驟

  1. 訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。

  2. 在左側導航欄,單擊數據庫代理

  3. 連接信息區域,您可以通過兩種方法開啟連接池:

    說明
    • 默認關閉連接池。

    • 修改連接池類型后,僅對新連接生效。

    • 方法一:將鼠標置于代理連接地址(終端)ID右側的image.png圖標,在彈出的對話框中單擊開啟事務級連接池開啟會話級連接池,然后在彈出的對話框中單擊確定。

      image.png

    • 方法二:在目標代理連接地址操作列,單擊修改配置,在彈出的對話框中,在連接池右側選中目標連接池類型,即開啟了對應類型的連接池。

      說明

      如果原來已經開啟了某類連接池,重新選擇連接池類型,可修改類型。

      image.png

相關API

API

描述

DescribeDBProxy

查詢RDS實例的數據庫代理詳情。

DescribeDBProxyEndpoint

查詢RDS實例數據庫代理的連接地址信息。

ModifyDBProxyEndpoint

修改RDS實例數據庫代理連接地址訪問策略。

相關概念

  • 短連接:指僅在短時間保持的連接。例如PHP應用程序,客戶端打開一個連接,執行一個簡單的查詢,然后關閉連接。優點是不需要長期占用連接通道,缺點是每次發送業務都要建一次連接,建立連接耗費MySQL數據庫主線程的開銷大。

  • 長連接:指長時間保持的連接。例如,可能有一個Web服務器或應用程序服務器打開許多到MySQL服務器的連接,并保持它們打開,直到客戶端(Web/Application服務器)停止,可能要持續數月。優點是與數據庫建立連接的次數相對較少,耗費MySQL數據庫主線程的開銷小。缺點是需要長期占用連接通道。

常見問題

Q:連接數達到多少,建議開啟連接池?

A:連接數如果可能超過MySQL數據庫的連接數上限, 建議開啟事務級連接池。

Q:連接池的連接保持時間是多少?

A:10秒。

Q:使用連接池對實例性能有影響嗎?

A:使用連接池后,短連接場景下,實例性能會有10%左右的提升。

Q:事務級連接池和會話級連接池的作用有何差異?

A:事務級連接池不僅可以減少MySQL數據庫主線程的開銷,還可以減少數據庫上的總連接數。

會話級連接池只能減少MySQL數據庫主線程的開銷,不能減少數據庫上的總連接數。

Q:事務級連接池和會話級連接池在工作原理上有何不同?

A:

連接池類型

會話是否可以共用后端連接

取后端連接的時機

把后端連接放回連接池的時機

會話與后端連接的映射關系

事務級

處理事務時

處理完一個事務(此時會話可能沒結束)

N:1

會話級

建立會話時

會話結束

N:N

Q:數據庫代理出現連接斷開的問題,是否因為應用和數據庫代理都用了連接池的功能?

A:連接斷開的原因很多,需要根據具體情況分析,不一定是因為應用和數據庫代理都用了連接池的功能。