資料庫過多
你每次連接資料庫都不connection.close()的後果
B. 資料庫連接數過多,怎麼都降不下來
第一先限制Innodb的並發處理.如果innodb_thread_concurrency = 0 可以先改成 16或是64 看機器壓力,如果
非常大,先改成16讓機器的壓力下來,然後慢慢增達,適應自已的業務.
處理方法: set global innodb_thread_concurrency=16;
第二: 對於連接數已經超過600或是更多的情況,可以考慮適當的限制一下連接數,讓前端報一下錯,也別讓DB掛了.
DB在了,總是可以用來載入一下數據,當數據載入到了nosql里了,慢慢的DB壓力也會降下來的.
C. 如何輕松解決MYSQL資料庫連接過多的錯誤
系統不能連接資料庫,關鍵要看兩個數據:
1、資料庫系統允許的最大可連接數max_connections。這個參數是可以設置的。如果不設置,默認是100。最大是16384。
2、資料庫當前的連接線程數threads_connected。這是動態變化的。
查看max_connections、max_connections的辦法見後。
如果
threads_connected
==
max_connections
時,資料庫系統就不能提供更多的連接數了,這時,如果程序還想新建連接線程,資料庫系統就會拒絕,如果程序沒做太多的錯誤處理,就會出現類似強壇的報錯信息。
因為創建和銷毀資料庫的連接,都會消耗系統的資源。而且為了避免在同一時間同時打開過多的連接線程,現在編程一般都使用所謂資料庫連接池技術。
但資料庫連接池技術,並不能避免程序錯誤導致連接資源消耗殆盡。
這種情況通常發生在程序未能及時釋放資料庫連接資源或其他原因造成資料庫連接資源不能釋放,但強壇系統估計不會發生這種低級的編程錯誤。
該錯誤的簡便的檢查辦法是,在刷新強壇頁面時,不斷監視threads_connected的變化。如果max_connections足夠大,而
threads_connected值不斷增加以至達到max_connections,那麼,就應該檢查程序了。當然,如果採用資料庫連接池技術,
threads_connected增長到資料庫連接池的最大連接線程數時,就不再增長了。
從強壇出錯的情況看,更大的可能性是資料庫系統沒能進行適當地配置。下面提出一點建議。供參考
讓你們的工程師把mysql的最大允許連接數從默認的100調成32000。這就不會老出現連接過多的問題了。
D. mysql資料庫中,數據量很大的表,有什麼優化方案么
個人的觀點,這種大表的優化,不一定上來就要分庫分表,因為表一旦被拆分,開發、運維的復雜度會直線上升,而大多數公司是欠缺這種能力的。所以MySQL中幾百萬甚至小幾千萬的表,先考慮做單表的優化。
單表優化
單表優化可以從這幾個角度出發:
表分區:MySQL在5.1之後才有的,可以看做是水平拆分,分區表需要在建表的需要加上分區參數,用戶需要在建表的時候加上分區參數;分區表底層由多個物理子表組成,但是對於代碼來說,分區表是透明的;SQL中的條件中最好能帶上分區條件的列,這樣可以定位到少量的分區上,否則就會掃描全部分區。
讀寫分離:最常用的櫻桐優化手段,寫主庫讀從庫;
增加緩存:主要的思想就是減少對資料庫的訪問,緩存可以在整個架構中的很多地方,比如:資料庫本身有就緩存,客戶端緩存,資料庫訪問層對SQL語句的緩存,應用程序內的緩存,第三方緩存(如Redis等);
欄位設計:單表不要有太多欄位;VARCHAR的長度盡量只分配真正需要的空間;盡量使用TIMESTAMP而非DATETIME;避免使用NULL,可以通過設置默認值解決。
索引優化:索引不是越多越好,針對性地建立索引,索引會加速查詢,但是對新增、修改、刪除會造成一定的影響;值域很少的欄位不適合建索引;盡量不用UNIQUE,不要設置外鍵,由程序保證;
SQL優化:盡量使用索引,也要保證不要因為錯誤的寫法導致索引失效;比如:避免前導模糊查詢,避免隱式轉換,避免等號左邊做函數運算,in中的元素不宜過多等等;
NoSQL:有一些場景,可以拋棄MySQL等關系型資料庫,擁抱NoSQL;比如:統計類、日誌類、弱結構化的數據;事務要求低的場景。
表拆分
數據量進一步增大的時候,就不得不考慮表拆分的問題了:
垂直拆分:垂直拆分的意思就是把一個欄位較多的表,拆分成多個欄位較少的表;上文中也說過單表的欄位不宜過多,如果初期的表結構設計的就很好,就不會有垂直拆分的問題了;一般來說,MySQL單表的欄位最好不要超過二三十個。
水平拆分:就是我們常說的分庫分表了;分表,解決了單表數據過大的問題,但是畢竟還在同一台資料庫伺服器上,所以明頌裂IO、CPU、網路方面的壓力,並不會得到徹底的緩解,這個可以通過分庫來解決。水平拆分優點很明顯,可以利用多台資料庫伺服器的資源,提高了系統的負載能力;缺點是邏輯會變得復雜,跨節點的數據關聯性能差,維護難度大(特別是擴容的時候)。
希望我的回答,能夠幫助到你!我將持續分享Java開發、架構激閉設計、程序員職業發展等方面的見解。