mysql設置成內存資料庫,mysql設置成內存資料庫的方法

本文目錄一覽:

MySQL 內存佔用總是太高,你需要立即進行這些操作……

生產環境中,MySQL 不經意間吃掉全部的內容,然後開始吃掉 SWAP,性能一降再降,怎麼辦?

可以從下面三點查看原因:

MySQL 使用內存,有兩個途徑。

永久佔用的內容

比如全局緩衝區(Global Buffer)類別,是在伺服器啟動期間從操作系統獲得的,不會釋放到任何一個別的進程。

動態請求的內存

線程緩衝區由MySQL使用,它是在處理新查詢時從操作系統請求的內存。在執行查詢之後,該內存被釋放回操作系統。

這意味著 MySQL 的內存使用,是 全局緩衝區 加上 線程緩衝區 以及 允許的最大連接數 。

對於專用資料庫伺服器,該值需要保持在伺服器內存的90%以下。在共享伺服器的情況下,它應該保持在伺服器內存的50%以下。

檢查一下 MySQL 設置,有助於確定內存使用情況,從而為 MySQL 分配合適的值。

一個近似的公式:

當網站受到攻擊時,有可能在短時間內建立異常高的連接數量。MySQL 中的 PROCESSLIST 可用於檢測頂級用戶並阻止對濫用連接的訪問。

找出查詢需要很長時間才能執行的語句,因為這些查詢需要進一步優化伺服器才能更好地執行,可以通過伺服器查詢日誌進行識別。由於查詢速度慢,導致磁碟讀取較多,導致內存和CPU使用率較高,影響伺服器性能。

最後,到了加內存條的時候了。雖然在優化資料庫設置之後,伺服器會不斷地路由到使用交換內存,但也必須增加內存。俗話說:「巧婦難為無米之炊」,就是這個意思。

上面說的這些方向,大家可以在實際操作中驗證體會,希望大家在資料庫優化的路上,麻溜順暢,砥礪前行。

mysql 如何分配內存

我們仍然使用兩個會話,一個會話 run,用於運行主 SQL;另一個會話 ps,用於進行 performance_schema 的觀察:

主會話線程號為 29,

將 performance_schema 中的統計量重置,

臨時表的表大小限制取決於參數  tmp_table_size 和 max_heap_table_size 中較小者,我們實驗中以設置 max_heap_table_size 為例。

我們將會話級別的臨時表大小設置為 2M(小於上次實驗中臨時表使用的空間),執行使用臨時表的 SQL:

查看內存的分配記錄:

會發現內存分配略大於 2M,我們猜測臨時表會比配置略多一點消耗,可以忽略。

查看語句的特徵值:

可以看到語句使用了一次需要落磁碟的臨時表。

那麼這張臨時表用了多少的磁碟呢?

我們開啟 performance_schema 中 waits 相關的統計項:

重做實驗,略過。

再查看 performance_schema 的統計值:

可以看到幾個現象:

1. 臨時表空間被寫入了 7.92MiB 的數據。

2. 這些數據是語句寫入後,慢慢逐漸寫入的。

來看看這些寫入操作的特徵,該方法我們在 實驗 03 使用過:

可以看到寫入的線程是 page_clean_thread,是一個刷臟操作,這樣就能理解數據為什麼是慢慢寫入的。

也可以看到每個 IO 操作的大小是 16K,也就是刷數據頁的操作。

結論:

我們可以看到,

1. MySQL 會基本遵守 max_heap_table_size 的設定,在內存不夠用時,直接將錶轉到磁碟上存儲。

2. 由於引擎不同(內存中表引擎為 heap,磁碟中表引擎則跟隨 internal_tmp_disk_storage_engine 的配置),本次實驗寫磁碟的數據量和 實驗 05 中使用內存的數據量不同。

3. 如果臨時表要使用磁碟,表引擎配置為 InnoDB,那麼即使臨時表在一個時間很短的 SQL 中使用,且使用後即釋放,釋放後也會刷臟頁到磁碟中,消耗部分 IO。

如何實現mysql 內存資料庫

有一個表引擎叫內存表,你在新建時可以選擇,或已有的表可以修改過去

原創文章,作者:WDEJ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/137691.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
WDEJ的頭像WDEJ
上一篇 2024-10-04 00:17
下一篇 2024-10-04 00:17

相關推薦

  • ArcGIS更改標註位置為中心的方法

    本篇文章將從多個方面詳細闡述如何在ArcGIS中更改標註位置為中心。讓我們一步步來看。 一、禁止標註智能調整 在ArcMap中設置標註智能調整可以自動將標註位置調整到最佳顯示位置。…

    編程 2025-04-29
  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • Python中init方法的作用及使用方法

    Python中的init方法是一個類的構造函數,在創建對象時被調用。在本篇文章中,我們將從多個方面詳細討論init方法的作用,使用方法以及注意點。 一、定義init方法 在Pyth…

    編程 2025-04-29
  • 用不同的方法求素數

    素數是指只能被1和自身整除的正整數,如2、3、5、7、11、13等。素數在密碼學、計算機科學、數學、物理等領域都有著廣泛的應用。本文將介紹幾種常見的求素數的方法,包括暴力枚舉法、埃…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • 使用Vue實現前端AES加密並輸出為十六進位的方法

    在前端開發中,數據傳輸的安全性問題十分重要,其中一種保護數據安全的方式是加密。本文將會介紹如何使用Vue框架實現前端AES加密並將加密結果輸出為十六進位。 一、AES加密介紹 AE…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Python學習筆記:去除字元串最後一個字元的方法

    本文將從多個方面詳細闡述如何通過Python去除字元串最後一個字元,包括使用切片、pop()、刪除、替換等方法來實現。 一、字元串切片 在Python中,可以通過字元串切片的方式來…

    編程 2025-04-29

發表回復

登錄後才能評論