$sql="SELECT * FROM db_table where Time_Stamp>'$dt' ORDER by Time_Stamp ASC";
$sqla = mssql_query($sql);
while ($row = mssql_fetch_array($sqla)) {
......
}
結果就遇到這個問題,
Allowed memory size of ######## bytes exhausted
直覺上就是調整 php.ini 的 memory limit 。
於是我將 memory_limit 調高到 64M。
memory_limit = 64M ; Maximum amount of memory a script may consume (8MB)
但是問題並沒有立刻解決,於是我又將 output_buffering 的設定值由4096改成On,如
output_buffering = On
之後果然能執行。
但是類似的程式碼,用在 MySQL,卻沒有發生過這類的問題,這是有些奇怪的地方。
然而,好景不常,沒多久同樣的問題還是發生。
我推測是因為MSSQL每次都將所有的資料都讀出來,所以如果記憶體不夠是沒辦法的,但是隨著資料庫越來越大,如果沒有控制讀出的量,結果還是會造成記憶體不足的問題。
解決方法,就是控制每次 SELECT 的內容,越精確,所需要的記憶體空間就越小!
我解決的方法是加上 TOP 的指令,選取固定的前面幾筆資料,結果一切都OK了!
新的程式碼如下:
$sql="SELECT TOP 1 * FROM db_table where Time_Stamp>'$dt' ORDER by Time_Stamp ASC";
$sqla = mssql_query($sql);
while ($row = mssql_fetch_array($sqla)) {
直覺上就是調整 php.ini 的 memory limit 。
於是我將 memory_limit 調高到 64M。
memory_limit = 64M ; Maximum amount of memory a script may consume (8MB)
但是問題並沒有立刻解決,於是我又將 output_buffering 的設定值由4096改成On,如
output_buffering = On
之後果然能執行。
但是類似的程式碼,用在 MySQL,卻沒有發生過這類的問題,這是有些奇怪的地方。
然而,好景不常,沒多久同樣的問題還是發生。
我推測是因為MSSQL每次都將所有的資料都讀出來,所以如果記憶體不夠是沒辦法的,但是隨著資料庫越來越大,如果沒有控制讀出的量,結果還是會造成記憶體不足的問題。
解決方法,就是控制每次 SELECT 的內容,越精確,所需要的記憶體空間就越小!
我解決的方法是加上 TOP 的指令,選取固定的前面幾筆資料,結果一切都OK了!
新的程式碼如下:
$sql="SELECT TOP 1 * FROM db_table where Time_Stamp>'$dt' ORDER by Time_Stamp ASC";
$sqla = mssql_query($sql);
while ($row = mssql_fetch_array($sqla)) {
沒有留言:
張貼留言