2011-05-03 257 views
1

我一直在傾注MYSQL文檔,試圖確定我的腳本或MYSQL本身是否導致大表格的截斷。基本行爲我看到:當達到表大小限制時,MYSQL是否截斷表?

  • PHP腳本從瀏覽器拉開序幕選擇從MSSQL表中的行,並立即將它們插入到本地MySQL數據庫表。
  • 確定了MSSQL中的行數後,我的腳本將select分爲幾塊,以避免任何內存不足問題。
  • 腳本然後截斷本地表,並開始通過在塊迭代
  • 在MySQL中的數據後直接導入數據,我看到桌子關閉在〜200,000行後,突然表截斷和計數從
  • 開始
  • 我認爲我會看到有關表已滿的一些錯誤,並且我不認爲如果達到表限制,MySQL會截斷表。

誰能確定MySQL是否會自動截斷表如果達到極限表或環境進行檢查,關閉這樣的行爲?

回答

1

沒有MySQL會將在桌子上的大小沒有硬性限制,但也有一些限制......

明確表大小
您可以設置最大表的大小與

ALTER TABLE tbl_name MAX_ROWS=200000 

您可以看到當前的表格尺寸設置與

SHOW TABLE STATUS FROM db_name LIKE 'tbl_name'; 

請參閱:http://dev.mysql.com/doc/refman/5.0/en/full-table.html

注意MAX_ROWS是:

你計劃在表中存儲的行的最大數量。這不是一個硬性限制,而是存儲引擎提示表必須能夠存儲至少這麼多行。

文件系統限制
MySQL的5.x的有256TB的默認tablesize,但如果你的文件系統不允許文件> 4GB,這可能是導致此行爲以及限制。

內存限制
如果您使用的memory(堆)引擎,你的表的大小是由max_heap_table_size系統變量決定。

+0

謝謝!我懷疑這不是MySQL,但是在那個棺材裏釘一個釘子可以更容易地在我的腳本中查明問題。 – ProgrammerX 2011-05-03 19:38:36

0

我不認爲MySQL正在截斷你的數據,我已經處理了500,000行或更多的表,並且我根本沒有任何問題。所以,我認爲你最好小心你的PHP腳本或至少PHP配置,所有超時設置和PHP可以處理的腳本的大小。

  • 的max_execution_time
  • max_input_time設置
  • memory_limit的

我希望這可以幫助你。