內(nèi)存表有大小限制,內(nèi)存文件超過(guò) my.ini 中設(shè)置以后,會(huì)自動(dòng)轉(zhuǎn)換部分到硬盤。
“只有客戶發(fā)展了,才有我們的生存與發(fā)展!”這是創(chuàng)新互聯(lián)的服務(wù)宗旨!把網(wǎng)站當(dāng)作互聯(lián)網(wǎng)產(chǎn)品,產(chǎn)品思維更注重全局思維、需求分析和迭代思維,在網(wǎng)站建設(shè)中就是為了建設(shè)一個(gè)不僅審美在線,而且實(shí)用性極高的網(wǎng)站。創(chuàng)新互聯(lián)對(duì)網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)推廣、探索永無(wú)止境。
內(nèi)存表所占內(nèi)存以固定的大小分配空間,即使一個(gè)表中只有一條記錄,也可能占幾M空間。
內(nèi)存表是有大小限制的,在 my.ini 中可以設(shè)置,當(dāng)內(nèi)存大小達(dá)到限制時(shí),可能會(huì)報(bào)錯(cuò):#1114: The table ‘XXX’ is full 。
我們?nèi)匀皇褂脙蓚€(gè)會(huì)話,一個(gè)會(huì)話 run,用于運(yùn)行主 SQL;另一個(gè)會(huì)話 ps,用于進(jìn)行 performance_schema 的觀察:
主會(huì)話線程號(hào)為 29,
將 performance_schema 中的統(tǒng)計(jì)量重置,
臨時(shí)表的表大小限制取決于參數(shù)? tmp_table_size 和 max_heap_table_size 中較小者,我們實(shí)驗(yàn)中以設(shè)置 max_heap_table_size 為例。
我們將會(huì)話級(jí)別的臨時(shí)表大小設(shè)置為 2M(小于上次實(shí)驗(yàn)中臨時(shí)表使用的空間),執(zhí)行使用臨時(shí)表的 SQL:
查看內(nèi)存的分配記錄:
會(huì)發(fā)現(xiàn)內(nèi)存分配略大于 2M,我們猜測(cè)臨時(shí)表會(huì)比配置略多一點(diǎn)消耗,可以忽略。
查看語(yǔ)句的特征值:
可以看到語(yǔ)句使用了一次需要落磁盤的臨時(shí)表。
那么這張臨時(shí)表用了多少的磁盤呢?
我們開(kāi)啟 performance_schema 中 waits 相關(guān)的統(tǒng)計(jì)項(xiàng):
重做實(shí)驗(yàn),略過(guò)。
再查看 performance_schema 的統(tǒng)計(jì)值:
可以看到幾個(gè)現(xiàn)象:
1. 臨時(shí)表空間被寫入了 7.92MiB 的數(shù)據(jù)。
2. 這些數(shù)據(jù)是語(yǔ)句寫入后,慢慢逐漸寫入的。
來(lái)看看這些寫入操作的特征,該方法我們?cè)?實(shí)驗(yàn) 03?使用過(guò):
可以看到寫入的線程是 page_clean_thread,是一個(gè)刷臟操作,這樣就能理解數(shù)據(jù)為什么是慢慢寫入的。
也可以看到每個(gè) IO 操作的大小是 16K,也就是刷數(shù)據(jù)頁(yè)的操作。
結(jié)論:
我們可以看到,
1. MySQL 會(huì)基本遵守 max_heap_table_size 的設(shè)定,在內(nèi)存不夠用時(shí),直接將表轉(zhuǎn)到磁盤上存儲(chǔ)。
2. 由于引擎不同(內(nèi)存中表引擎為 heap,磁盤中表引擎則跟隨 internal_tmp_disk_storage_engine 的配置),本次實(shí)驗(yàn)寫磁盤的數(shù)據(jù)量和?實(shí)驗(yàn) 05?中使用內(nèi)存的數(shù)據(jù)量不同。
3. 如果臨時(shí)表要使用磁盤,表引擎配置為 InnoDB,那么即使臨時(shí)表在一個(gè)時(shí)間很短的 SQL 中使用,且使用后即釋放,釋放后也會(huì)刷臟頁(yè)到磁盤中,消耗部分 IO。
mysql的內(nèi)存表的大小在my.cnf文件中有定義,需要通過(guò)修改配置來(lái)修改臨時(shí)表的大小限制:
[mysqld]?
##內(nèi)存表容量?
max_heap_table_size=1024M?
##臨時(shí)表容量?
tmp_table_size=1024M?
在mysql配置文件的mysqld節(jié)點(diǎn)下,max_heap_table_size指定的是內(nèi)存表的最大內(nèi)存,而tmp_table_size指定的是臨時(shí)表的最大大小。
以上是如何修改mysql臨時(shí)表內(nèi)存表的大小限制的內(nèi)容,更多?臨時(shí)?大小?內(nèi)存?限制?修改?如何?MySQL?的內(nèi)容,請(qǐng)您使用右上方搜索功能獲取相關(guān)信息。
內(nèi)存表,就是放在內(nèi)存中的表,所使用內(nèi)存的大小可通過(guò)My.cnf中的max_heap_table_size指定,如max_heap_table_size=1024M。臨時(shí)表也是存放在內(nèi)存中,臨時(shí)表最大所需內(nèi)存需要通過(guò)tmp_table_size=1024M設(shè)定。
當(dāng)數(shù)據(jù)超過(guò)臨時(shí)表的最大值設(shè)定時(shí),自動(dòng)轉(zhuǎn)為磁盤表,此時(shí)因需要進(jìn)行IO操作,性能會(huì)大大下降,而內(nèi)存表不會(huì),內(nèi)存表滿后,會(huì)提示數(shù)據(jù)滿錯(cuò)誤。
臨時(shí)表和內(nèi)存表都可以人工創(chuàng)建,但臨時(shí)表更多的作用是系統(tǒng)自己創(chuàng)建后,組織數(shù)據(jù)以提升性能,如子查詢,臨時(shí)表在多個(gè)連接之間不能共享。
MySQL 需要?jiǎng)?chuàng)建隱式臨時(shí)表來(lái)解決某些類型的查詢。往往查詢的排序階段需要依賴臨時(shí)表。例如,當(dāng)您使用 GROUP BY,ORDER BY 或DISTINCT 時(shí)。這樣的查詢分兩個(gè)階段執(zhí)行:首先是收集數(shù)據(jù)并將它們放入臨時(shí)表中,然后是在臨時(shí)表上執(zhí)行排序。
對(duì)于某些 UNION 語(yǔ)句,不能合并的 VIEW,子查詢時(shí)用到派生表,多表 UPDATE 以及其他一些情況,還需要使用臨時(shí)表。如果臨時(shí)表很小,可以到內(nèi)存中創(chuàng)建,否則它將在磁盤上創(chuàng)建。MySQL 在內(nèi)存中創(chuàng)建了一個(gè)表,如果它變得太大,就會(huì)被轉(zhuǎn)換為磁盤上存儲(chǔ)。內(nèi)存臨時(shí)表的最大值由 tmp_table_size 或 max_heap_table_size 值定義,以較小者為準(zhǔn)。MySQL 5.7 中的默認(rèn)大小為 16MB。如果運(yùn)行查詢的數(shù)據(jù)量較大,或者尚未查詢優(yōu)化,則可以增加該值。設(shè)置閾值時(shí),請(qǐng)考慮可用的 RAM 大小以及峰值期間的并發(fā)連接數(shù)。你無(wú)法無(wú)限期地增加變量,因?yàn)樵谀承r(shí)候你需要讓 MySQL 使用磁盤上的臨時(shí)表。
注意:如果涉及的表具有 TEXT 或 BLOB 列,則即使大小小于配置的閾值,也會(huì)在磁盤上創(chuàng)建臨時(shí)表。
文章名稱:mysql怎么創(chuàng)建內(nèi)存表 mysql怎么創(chuàng)建表內(nèi)容
轉(zhuǎn)載來(lái)于:http://chinadenli.net/article32/dodecpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、網(wǎng)站導(dǎo)航、App開(kāi)發(fā)、定制網(wǎng)站、做網(wǎng)站、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)