我正在使用 PHP 和 MYSQL 数据库,因为它们都是开源的,易于使用。
当我逐个执行插入和/或更新 数百万行时,我遇到了问题
当此操作执行时,我得到了 MYSQL 错误:
'max_user_connections' active connections
这是解决此问题的最佳方法。
我不想使用PHP以外的其他数据库或语言。
connect_db();
$query = "insert into table(mobno,status,description,date,send_deltime,sms_id,msg,send_type) values('".$to."','".$status."','".$report."','','".$timewsha1."','".$smsID."','','".$type."')";
$result = mysql_query($query) or ("Query failed : " . mysql_error());
此查询将执行数千次。
然后服务器发出连接错误。
答案 0 :(得分:7)
首先,尝试从您的托管服务器管理员了解MySQL数据库可用的最大连续活动连接数。这是最基本的&掌握有关知识的主要信息。
如果您的页面加载了相当长的时间并在页面加载后释放连接,那么应该没问题。当您的脚本需要很长时间从数据库中检索信息或维护连接时,会出现此问题 由于您正在执行数百万行的INSERT和/或UPDATE操作,因此您可能会遇到一些问题。
此外,如果您无法关闭脚本中的连接,则可能有人将加载页面,而不是在加载页面时关闭连接,它将保持打开状态。然后没有其他人可以使用该连接。 因此请确保在执行所有MySQL / SQL查询结束时,数据库连接已关闭。另外,请确保您的服务器提供超过250个连接,因为几乎所有服务器通常都有100个连接。
还要确保您没有使用持久连接(在使用内置函数“mysql_pconnect()
”时可用),因为这将锁定用户,直到手动关闭连接。
希望它有所帮助。
答案 1 :(得分:2)
//this loop is for preparing the subquery for mutiple records
for(// this loop for getting data for mutiple records){
$sub_query[] = "('".$to."','".$status."','".$report."','','".$timewsha1."','".$smsID."','','".$type."')";
}
$query = "insert into table(mobno,status,description,date,send_deltime,sms_id,msg,send_type) values ";
$query .= implode(',',$sub_query);
mysql_query($query );
答案 2 :(得分:0)
因此,远程应用程序调用此脚本,向其发送值列表,然后执行此查询一次,对吧?它不是在foreach或for或while循环中?当你说它会被执行数百万次时,你的意思并不代表我的意思。如果它处于循环中,则将db connect移动到循环外部,否则每次循环迭代时它都会尝试再次连接,并且还记得在脚本结束时调用mysql_close,以防万一。
答案 3 :(得分:0)
mysql_pconnect()将创建一个持久连接,如果您不想耗尽服务器的连接池,那么这就是您的选择。