国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

php查詢mysql大量數(shù)據(jù)造成內(nèi)存不足的解決方法

2019-11-08 20:37:04
字體:
來源:轉載
供稿:網(wǎng)友

本文實例分析了php查詢MySQL大量數(shù)據(jù)造成內(nèi)存不足的解決方法。分享給大家供大家參考。具體分析如下:

一、問題

使用php查詢mysql大數(shù)據(jù)量的時候,程序尚未執(zhí)行完畢,跳出警告:Fatal error:  Allowed memory size of 100663296 bytes exhausted (tried to allocate 103 bytes) 錯誤提示:php所分配到的100M內(nèi)存被占用完畢。

二、解決方法:

最簡單的解決辦法是:在執(zhí)行文件的頭部增加:

?
1ini_set('memory_limit','256M');

把內(nèi)存增加到256M或者更多,可以增大php所使用的內(nèi)存空間但是下次若要讀取更多的數(shù)據(jù)該怎么辦呢,總不能一次次的增加,導致服務器的內(nèi)存都被php吃光。

這里介紹一個函數(shù):

使用memory_get_usage()方法獲得php使用的內(nèi)存量。發(fā)現(xiàn)隨著讀取數(shù)據(jù)條數(shù)的增加,php使用的內(nèi)存在一步步增加。難道php在查詢mysql時的數(shù)據(jù)是存在內(nèi)存中的?搜索了一下,發(fā)現(xiàn)果真大概就是這個意思。mysql的C API函數(shù)有mysql_use_result()和mysql_store_result()mysql_store_result()會把結果集從mysqlServer讀到客戶端,而 mysql_use_result()只是讀取了結果集的元信息

1、php的mysql_query調(diào)用的是mysql_store_result(),自動獲取并緩存結果集2、而php的另一個函數(shù)mysql_unbuffered_query()則是調(diào)用的 mysql_use_result(),一方面,這在處理很大的結果集時會節(jié)省可觀的內(nèi)存。另一方面,可以在獲取第一行后立即對結果集進行操作,而不用等到整個 SQL 語句都執(zhí)行完畢。

所以我們在讀取大量數(shù)據(jù)的時候,可以使用mysql_unbuffered_query()來替代mysql_query()。經(jīng)測試,的確如此。而且相當給力,導完所有數(shù)據(jù)內(nèi)存一直保持在1MB以內(nèi),沒有增長過mysql_unbuffered_query() 向 MySQL 發(fā)送一條 SQL 查詢 query,但不像 mysql_query()那樣自動獲取并緩存結果集。一方面,這在處理很大的結果集時會節(jié)省可觀的內(nèi)存。另一方面,可以在獲取第一行后立即對結果集進行操作,而不用等到整個 SQL 語句都執(zhí)行完畢。當使用多個數(shù)據(jù)庫連接時,必須指定可選參數(shù) link_identifier。mysql_unbuffered_query()的好處是有代價的:在 mysql_unbuffered_query()返回的結果集之上不能使用 mysql_num_rows() 和 mysql_data_seek()。此外在向 MySQL 發(fā)送一條新的 SQL 查詢之前,必須提取掉所有未緩存的 SQL 查詢所產(chǎn)生的結果行。所以一定要結合自己的業(yè)務需求適當?shù)倪x取函數(shù)


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 鄂尔多斯市| 屏东市| 乳山市| 榆中县| 九台市| 岱山县| 云安县| 尼木县| 禄丰县| 庆城县| 兴文县| 阿尔山市| 新竹县| 台前县| 北安市| 利川市| 武宁县| 奇台县| 溧水县| 治县。| 威远县| 三穗县| 吴江市| 迁西县| 黄浦区| 安陆市| 邛崃市| 来凤县| 秀山| 凌云县| 嘉善县| 南川市| 晋江市| 邢台市| 民县| 札达县| 石泉县| 陇西县| 冷水江市| 营山县| 大安市|