一文讀懂如何解決MySQL資料庫超時配置問題

2020-12-13 電子發燒友

一文讀懂如何解決MySQL資料庫超時配置問題

發表於 2017-10-25 16:28:27

  現在已進入了10月底,雙十一的時間已經不多,各大電商紛紛進行備戰。在過程中我們發現在MySQL資料庫中出翔了許多的超時的配置,那麼它有哪些超時配置,它會有什麼影響嗎?今天的文章就讓我來大家來分析一下。

  1. JDBC超時設置

  connectTimeout:表示等待和MySQL資料庫建立socket連結的超時時間,默認值0,表示不設置超時,單位毫秒,建議30000

  socketTimeout:表示客戶端和MySQL資料庫建立socket後,讀寫socket時的等待的超時時間,linux系統默認的socketTimeout為30分鐘,可以不設置

  2. 連接池超時設置

  maxWait:表示從資料庫連接池取連結,連接池沒有可用連接時的等待時間,默認值0,表示無限等待,單位毫秒,建議60000

  

  3. MyBatis查詢超時

  defaultStatementTimeout:表示在MyBatis配置文件中默認查詢超時間,單位秒,不設置則無線等待

  

  如果一些sql需要執行超過defaultStatementTimeout可以通過Mapper文件單獨的sql的timeout進行配置

  

  4. 事務超時

  事務超時用於控制事務執行的超時,執行時間是事務內所有代碼執行總和,單位為秒。

  

  總結

  高級別的timeout依賴於低級別的timeout,只有當低級別的timeout無誤時,高級別的timeout才能確保正常。例如,當socket timeout出現問題時,高級別的statement timeout和transaction timeout都將失效。

  1. Transaction Timeout

  Spring提供的transaction timeout配置非常簡單,它會記錄每個事務的開始時間和消耗時間,當特定的事件發生時就會對消耗時間做校驗,當超出timeout值時將拋出異常。

  假設某個事務中包含5個statement,每個statement的執行時間是200ms,其他業務邏輯的執行時間是100ms,那麼transaction timeout至少應該設置為1,100ms(200 * 5 + 100)。

  2. Statement Timeout

  statement timeout用來限制statement的執行時長,timeout的值通過調用JDBC的java.sql.Statement.setQueryTimeout(int timeout) API進行設置。不過現在開發者已經很少直接在代碼中設置,而多是通過框架來進行設置。

  在iBatis中,statement timeout的默認值可以通過sql-map-config.xml中的defaultStatementTimeout 屬性進行設置。同時,你還可以設置sqlmap中select,insert,update標籤的timeout屬性,從而對不同sql語句的超時時間進行獨立的配置。

  3. Socket timeout

  JDBC的socket timeout在資料庫被突然停掉或是發生網絡錯誤(由於設備故障等原因)時十分重要。由於TCP/IP的結構原因,socket沒有辦法探測到網絡錯誤,因此應用也無法主動發現資料庫連接斷開。如果沒有設置socket timeout的話,應用在資料庫返回結果前會無期限地等下去,這種連接被稱為dead connection。

  為了避免dead connections,socket必須要有超時配置。socket timeout可以通過JDBC設置,socket timeout能夠避免應用在發生網絡錯誤時產生無休止等待的情況,縮短服務失效的時間。

  不推薦使用socket timeout來限制statement的執行時長,因此socket timeout的值必須要高於statement timeout,否則,socket timeout將會先生效,這樣statement timeout就變得毫無意義,也無法生效。

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 從 SQL Server 到 MySQL (一):異構資料庫遷移
    這其中包含兩個重點子項目:開發語言從 C# 遷移到 Java, 資料庫從 SQL Server 遷移到 MySQL。本系列文章就是向大家介紹, 從 SQL Server 遷移到 MySQL 所面臨的問題和我們的解決方案。
  • python對mysql資料庫的操作(一)
    是的,有,必須得驗證url,這是一個完整的測試用例,再來說註冊,註冊成功後,驗證點再我看來,一是到資料庫查看,用戶註冊的信息是否insert到對應了表了,滿足一的基礎上,再驗證註冊的用戶可不可以登錄。所以說,在自動化測試中,對資料庫的操作,具體看得場景,業務,具體問題得具體分析。
  • MySQL資料庫「十宗罪」(十大經典錯誤案例)
    學習任何一門技術的同時,其實就是自我修煉的過程。沉下心,嘗試去擁抱數據的世界!Top 1:Too many connections(連接數過多,導致連接不上資料庫,業務無法正常進行)問題還原:如何避免這類問題,個人建議在安裝MySQL初始化的時候,一定加上--user=mysql,這樣就可以避免權限問題。
  • day06-python資料庫-mysql之安裝
    如果我們不考慮從文件中讀取數據的效率問題,並且假設我們的程序所有的組件都運行在一臺機器上,那麼用文件存取數據,並沒有問題。但需要考慮的問題是:程序的執行效率依賴於承載它的硬體,而一臺機器機器的性能總歸是有限的,受限於目前的硬體水平,垂直擴展是有極限的。於是我們只能通過水平擴展來增強我們系統的整體性能,這就需要我們將程序的各個組件分布於多臺機器去執行。
  • 每天一分鐘,python一點通(Python 連接資料庫mysql)
    上期文章我們分享了如何使用資料庫界面化操作mysql資料庫每天一分鐘,python一點通(workbench new table),且建立了一個資料庫表,該如何操作資料庫?  Python 連接資料庫mysql  在操作mysql資料庫前,請先安裝pymysql(pip install pymysql)  import pymysql.cursorsMYSQL_HOSTS='localhost' # 本地資料庫,若是伺服器上的資料庫,請輸入伺服器IPMYSQL_USER
  • MySQL 資料庫「十宗罪」(十大經典錯誤案例)
    今天就給大家列舉 MySQL 資料庫中,最經典的十大錯誤案例,並附有處理問題的解決思路和方法,希望能給剛入行,或資料庫愛好者一些幫助,今後再遇到任何報錯,我們都可以很淡定地去處理。學習任何一門技術的同時,其實就是自我修煉的過程。沉下心,嘗試去擁抱數據的世界!
  • 如何在Ubuntu 18.04中安裝MySQL 8.0資料庫伺服器
    MySQL Community Server 是一款免費的開源、流行和跨平臺的資料庫管理系統。它支持 SQL 和 NoSQL,並具有「可插拔」的存儲引擎架構。此外,它還配備了針對不同程式語言的多個資料庫連接器,讓您可以使用任何流行的語言和許多其他功能開發應用程式。
  • MySQL教程之MySQL定時備份資料庫
    一、MySQL數據備份1.1、 mysqldump命令備份數據在MySQL中提供了命令行導出資料庫數據以及文件的一種方便的工具mysqldump,我們可以通過命令行直接實現資料庫內容的導出dump,首先我們簡單了解一下mysqldump命令用法:
  • 資料庫中間件mysql-proxy細節【mysql官方的中間件】
    一、mysql-proxy簡介mysql-proxy是mysql官方提供的mysql中間件服務
  • 【用binlog日誌】恢復 MySQL 資料庫刪除數據
    要通過binlog日誌恢復mysql資料庫刪除數據的前提:binlog日誌確定是開啟的。打開MySQL資料庫的配置文件(windows系統中的配置文件為my.ini,一般在安裝目錄的根目錄下;Linux系統中配置文件為my.cnf,一般在/usr/local/mysql/etc/目錄下),在配置文件中查看log-bin=MySQL-bin有沒有被注釋掉(每行第一個字符為#號表示該行被注釋),若沒被注釋表示開啟,若被注釋表示沒有開啟
  • 如何使用MySQL資料庫
    如何使用MySQL資料庫前言:前面我們已經了解了如何搭建MySQL資料庫,那麼接下來我們就一起來了解一下,如何使用MySQL資料庫。MySQL資料庫系統也是一個典型的C/S(客戶端/伺服器)架構應用,要訪問MySQL資料庫需要使用專門的客戶端軟體。在linux系統中,最簡單、易用的MySQL客戶端軟體是其自帶的MySQL命令工具。
  • 沒遇到過這十個MySQL資料庫經典錯誤,你一定不是個好工程師
    跟無頭蒼蠅一樣,會不加思索地把錯誤粘到百度上,希望趕緊查找一下有沒有好的問題處理方法。我想上述這個應該是剛從事資料庫的小白都會遇到的窘境。今天就給大家列舉 MySQL 資料庫中最經典的十大錯誤案例,並附有處理問題的解決思路和方法。希望能給剛入行或資料庫愛好者一些幫助,今後再遇到任何報錯,我們都可以很淡定地去處理。學習任何一門技術的同時,其實就是自我修煉的過程。
  • Sharding-jdbc教程:Mysql資料庫主從搭建
    這是系列文章Sharding-jdbc文章的第一篇,本篇文章主要講述如何搭建Mysql的主從。搭建環境為centos 7.5,資料庫版本為5.7。需要三臺虛擬機,一主兩從,讀者可以在自己的電腦上創建虛擬機,也可以在雲服務商買三臺,按小時計費,一小時幾毛錢,比較實惠。
  • 再見亂碼:5 分鐘讀懂 MySQL 字符集設置
    不少同學在日常工作中遇到的「亂碼」問題,很有可能就是因為對字符集與字符序的理解不到位、設置錯誤造成的。如何指定:MySQL服務啟動時,可通過命令行參數指定。也可以通過配置文件的變量指定。server默認字符集、字符序:在MySQL編譯的時候,通過編譯參數指定。character_set_server、 collation_server分別對應server字符集、server字符序。
  • 基於MySQL的高性能資料庫應用開發
    一、高性能資料庫的選擇---- 在資料庫的應用開發中,常常會遇到性能和代價的之間矛盾。開始,我們採用了MS SQLServer 6.5 作為資料庫系統,用Visual C++ 6.0開發了訪問資料庫的前端,應用ODBC數據接口,在進行了大量的資料庫配置和程序優化後,發現仍不能滿足性能要求。
  • 實例講解:.NET如何訪問MySQL資料庫
    .NET的資料庫天然支持MSSQLServer,但是並非其他資料庫不支持,而是微軟基於自身利益需要,在支持、營銷上推自己的資料庫產品;但是作為平臺戰略,他並非排斥其他資料庫,而是參考java體系提出了一套資料庫訪問規範,讓各個第三方進行開發,提供特定的驅動。
  • 摘要:前面講到Red Hat Linux系統下mysql資料庫的安裝方法,下面...
    前面講到Red Hat Linux系統下mysql資料庫的安裝方法,下面介紹如何遠程訪問mysql資料庫。user表中記錄了不同的用戶對mysql資料庫的訪問權限如果我們要遠程訪問mysql資料庫的話,需要對user表中的記錄做相應修改 mysql> update  user  set host=』%』 where user=』root』 and host=』localhost.localdomain』 ;注意:上面一句中%的意思就是容許任何機器從遠程訪問mysql資料庫
  • 利用PowerDesigner連接Mysql資料庫並逆向所有表關係圖兩種方式
    兩種方式:一種是連接mysql資料庫,另一種是有sql腳本文件的。一:配置PowerDesigner連接到mysql資料庫(使用的是JDBC方式)。1.1:新建文件,選擇mysql.如下圖:1.3:配置資料庫連接信息在上一步,我們可以看到彈出如下圖的窗口。參數說明::JDBC配置文件名稱。
  • 沒遇到過這十個MySQL 資料庫經典錯誤,你一定不是個好工程師
    案例一Too many connections(連接數過多,導致連接不上資料庫,業務無法正常進行)問題還原:mysql> show variables like 『%max_connection%』;| Variable_name   | Value |max_connections
  • 一文看懂MySQL開源審計的性能差異 | 附Python作圖
    上文,筆者使用一個簡單的測試案例驗證審計插件的功能:一文搞懂MySQL開源審計功能一. 為什麼要做性能測試?1. 從測試的角度看,軟體支持的特性和功能並不是唯一的問題,而性能測試的目標不僅僅是發現錯誤,還有消除性能的瓶頸。2.