0

我们在注册表单上设计了一个国家、州、城市的下拉功能,但是由于进程中明显的 SQL 过载,我们的主机(Host Gator)在我们的数据库上设置了一个块。我认为这与测试 drop 有关下来,我所做的只是激怒国家,以确保国家相应地改变了几次,并且与城市相同。

我们有一个共享主机帐户,最多可以使用 25% 的 CPU 和 RAM,这就像 32 核 AMD 和 64GB Ram 服务器。我真的看不出三层下拉怎么可能导致这样的问题。

这是他们发给我们的电子邮件:

你好,

此消息是为了通知您在您的数据库中放置了一个临时块。发现该数据库消耗了过多的处理器时间,以至于降低了整体系统性能。虽然我们在服务条款中确实将每个帐户限制为不超过系统 CPU 的 25%,但我们不会主动禁用帐户,直到它们大大超过该数字,这就是在这种情况下发生的情况。通过在有限的时间内限制查询或连接的最大数量,对该数据库的请求可能会降级,或者如果存在持续问题,最终我们可能会被迫阻止对该数据库的访问,直到问题得到解决。

解决这种情况可能很简单,只需向数据库添加额外的索引、优化使用的查询或其他同样简单的事情。如果不是,则可能只是将此数据库移动到专用服务的问题,因为它可能已经超出了共享环境。

如果您认为您有解决这种过度使用的方法,我们很乐意与您讨论这种情况,并可能在服务器上恢复数据库。否则,如果专用服务器是最合适的解决方案,我们将很乐意协助您完成升级过程。谢谢您,我们期待很快收到您的来信。

~~~ 过多的 MySQL 活动是由 (a) 一个长时间运行的进程锁定一个表,导致其他查询备份,(b) 一个未优化的查询][示例:select all from ... 并涉及大型或复杂的查询],(c) 高峰时段的大型表副本/维护。

注意:以下只是可能的修复或建议,HostGator 不认可或支持。包含它们是希望它们适用于您的情况,和/或帮助您减少 SQL 查询消耗的资源量。与往常一样,最好在进行任何更改或调整之前备份所有数据。

首先,您可能需要优化您的表格。频率取决于数据库的大小和使用情况,但大多数数据库会受益于每年做这样的事情: a) 进入您的 phpMyAdmin/MySQL 控制面板。单击数据库(不是表,数据库名称),在右侧列中应列出您的表。向下滚动直到看到 .Check all。关联。单击该链接,确保选中所有数据库表,然后从其旁边的下拉列表中,仔细选择 .Optimize table..

此外,向表中添加索引可能会提高性能。如果不确定自己在做什么,最好不要修改任何表;建议谨慎。有各种各样的文章

如果您使用您的 IP 地址 ( http://www.hostgator.com/ip.shtml )回复此问题,我们将非常乐意为您启用 HTTP 访问,这样您就可以安全地处理脚本而无需它引起了进一步的问题。请让我们知道您希望如何进行。

CPU_TIME:138 table_rows_read:402659370 SELECTS:134266 ROWS_UPDATED:66854 ROWS_FETCHED:200708 BUSY_TIME:141 ONNECTED_TIME:159 BYTES_SENT:0 BYTES_RECEIVED:16653735 WAIT_TIME:3

顶部表格行显示:

DB_USER: 创新 -- TOTAL_CONNECTIONS: 279 -- CONNECTED_TIME: 159 -- CPU_TIME: 138 -- TABLE_ROW_READS: 402664343 -- SELECT_COMMANDS: 134301 -- UPDATE_COMMANDS: -- BUSY_TIME: 141 -- BYTES_SENT: 0 -- BYTES_RECEIVED: 1665ITWA81 (IO): 3

最高等待 (IO) 时间:

DB_USER: 创新 -- TOTAL_CONNECTIONS: 279 -- CONNECTED_TIME: 159 -- CPU_TIME: 138 -- TABLE_ROW_READS: 402664343 -- SELECT_COMMANDS: 134301 -- UPDATE_COMMANDS: -- BUSY_TIME: 141 -- BYTES_SENT: 0 -- BYTES_RECEIVED: 1665ITWA81 (IO): 3

创新 10050 0.0 0.0 17964 1340 ? SN 02:29 0:00 imap [anthonysinclair@creavation.com 90.220.91.59]

创新 10200 0.0 0.0 17768 1084 ? SN 02:29 0:00 imap [anthonysinclair@creavation.com 90.220.91.59]

创新 10381 0.0 0.0 18040 1604 ? SN 02:29 0:00 imap [anthonysinclair@creavation.com 90.220.91.59]

创新 10539 0.0 0.0 18036 1584 ? SN 02:29 0:00 imap [anthonysinclair@creavation.com 90.220.91.59]

创新 21266 15.0 0.0 295808 15884 ? RN 02:31 0:00 /usr/bin/php /home3/innovate/public_html/developer/innovativeresearch/admin/addtotable.php

2013 年 11 月 14 日星期四 02:31:25 CST

运行进程:

创新 10050 0.0 0.0 17964 1340 ? SN 02:29 0:00 imap [anthonysinclair@creavation.com 90.220.91.59]

创新 10200 0.0 0.0 17768 1084 ? SN 02:29 0:00 imap [anthonysinclair@creavation.com 90.220.91.59]

创新 10381 0.0 0.0 18040 1604 ? SN 02:29 0:00 imap [anthonysinclair@creavation.com 90.220.91.59]

创新 10539 0.0 0.0 18036 1584 ? SN 02:29 0:00 imap [anthonysinclair@creavation.com 90.220.91.59]

创新 21266 15.0 0.0 295808 15884 ? RN 02:31 0:00 /usr/bin/php /home3/innovate/public_html/developer/innovativeresearch/admin/addtotable.php

运行查询:

** * ** * ** * ** * * 1. 行* ** * ** * ** * ** *

用户:创新

DB:创新研究

状态:

时间:0

命令:睡觉

信息:空

打开连接

当前站点请求:

99.231.106.237 creavation.com /developer/innovativeresearch/admin/addtotable.php?addprod=

99.231.106.237 creavation.com /developer/innovativeresearch/admin/addtotable.php?addprod=

99.231.106.237 creavation.com /developer/innovativeresearch/admin/addtotable.php?addprod=

99.231.106.237 creavation.com /developer/innovativeresearch/admin/addtotable.php?addprod=

99.231.106.237 creavation.com /developer/innovativeresearch/admin/addtotable.php?addprod=

99.231.106.237 creavation.com /developer/innovativeresearch/admin/addtotable.php?addprod=

99.231.106.237 creavation.com /developer/innovativeresearch/admin/addtotable.php?addprod=

99.231.106.237 creavation.com /developer/innovativeresearch/admin/addtotable.php?addprod=

99.231.106.237 creavation.com /developer/innovativeresearch/admin/addtotable.php?addprod=

99.231.106.237 creavation.com /developer/innovativeresearch/admin/addtotable.php?addprod=

99.231.106.237 creavation.com /developer/innovativeresearch/admin/addtotable.php?addprod=

99.231.106.237 creavation.com /developer/innovativeresearch/admin/addtotable.php?addprod=

99.231.106.237 creavation.com /developer/innovativeresearch/admin/addtotable.php?addprod=

99.231.106.237 creavation.com /developer/innovativeresearch/admin/addtotable.php?addprod=

这是我们从以下位置购买国家、州、城市数据库的地方:

http://www.worldcitiesdatabase.com/world-cities.aspx

对此的任何帮助将不胜感激:(

<?php //require_once('inc/config.php');?>
<?php
//check();          //check admin login

$link = mysql_connect('localhost', 'innovate', '4HIDDENW8n');
$db_selected = mysql_select_db('innovate_research', $link);

/*$sql = "select * from country";
$res=mysql_query($sql);
while($row=mysql_fetch_array($res))
{
    $sql=mysql_query("INSERT INTO `innovere_country` (`country_name` ,`country_code`) VALUES ('".$row['country_name']."', '".$row['country_code']."');");
}*/


/*$sql = "select * from states";
$res=mysql_query($sql);
while($row=mysql_fetch_array($res))
{

    $sql_country = mysql_fetch_array(mysql_query("select * from innovere_country where `country_code`='".$row['country_code']."'"));

    $sql=mysql_query("INSERT INTO `innovere_state` (`country_id` ,`state_name` ,`state_code`) VALUES ('".$sql_country['country_id']."',  '".addslashes($row['state_name'])."',  '".$row['state_code']."');");
}*/

ini_set('max_execution_time', 0);
$sql_count = mysql_fetch_array(mysql_query("select count(*) as num_c from weblocations"));

if(empty($_REQUEST['startpaging']))
{
    $_REQUEST['startpaging']=0;
}

$startpaging = $_REQUEST['startpaging']+240;    
echo "<br>add : ".$addprod=$_REQUEST['addprod'];

echo $sql = "select * from weblocations limit $startpaging,240";
$res=mysql_query($sql);

while($row=mysql_fetch_array($res))
{
    $addprod++;
    if(!empty($row['country_code']))
    {
    $sql_country = mysql_fetch_array(mysql_query("select * from innovere_country where `country_code`='".$row['country_code']."'"));
    }

    if(!empty($row['state_code']))
    {
    $sql_state = mysql_fetch_array(mysql_query("select * from innovere_state where `state_code`='".$row['state_code']."' and `country_id`='".$sql_country['country_id']."'"));
    }

    $sql=mysql_query("INSERT INTO `innovere_city` (`state_id` ,`country_id` ,`city_name`) VALUES ('".$sql_state['state_id']."',  '".$sql_country['country_id']."',  '".addslashes($row['city_name'])."');");
    echo "<br>"."INSERT INTO `innovere_city` (`state_id` ,`country_id` ,`city_name`) VALUES ('".$sql_state['state_id']."',  '".$sql_country['country_id']."',  '".$row['city_name']."');";
}

echo "<br>total : ".$sql_count['num_c'];
echo "<br>add : ".$addprod;

if($sql_count['num_c']>$addprod)
{
echo "<script>document.location.href='addtotable.php?addprod=".$addprod."&startpaging=".$startpaging."'</script>";
}

        /*ini_set('max_execution_time', 0);
        $country_code = "AF";

        $sql_count = mysql_fetch_array(mysql_query("select count(*) as count_num from weblocations where `       country_code`='".$country_code."'"));

        echo "<br>Count: ".$sql_count['count_num'];

        echo $sql = "select * from weblocations where `country_code`='".$country_code."'";
        $res=mysql_query($sql);

        while($row=mysql_fetch_array($res))
        {
        if(!empty($row['country_code']))
        {
        $sql_country = mysql_fetch_array(mysql_query("select * from innovere_country where `      country_code`='".$row['country_code']."'"));
        }

        if(!empty($row['state_code']))
        {
        $sql_state = mysql_fetch_array(mysql_query("select * from innovere_state where `      state_code`='".$row['state_code']."' and `country_id`='".$sql_country['country_id']."'"));
        }

        $sql=mysql_query("INSERT INTO `innovere_city` (`state_id` ,`country_id` ,`city_name`) VALUES ('".$sql_state['state_id']."',  '".$sql_country['country_id']."',  '".addslashes($row['city_name'])."');");
        echo "<br>"."INSERT INTO `innovere_city` (`state_id` ,`country_id` ,`city_name`) VALUES    ('".$sql_state['state_id']."',  '".$sql_country['country_id']."',  '".$row['city_name']."');";
    }*/

    ?>

这是我们拥有的表格列表:

Table 1: innovere_city Rows = 1,604,640 MyISAM utf8_general_ci 73.8 MiB, Table 2: innovere_country Rows= 247 MyISAM utf8_general_ci 10.7 KiB Table 3: weblocations Rows = 2,449,838 MyISAM utf8_persian_ci 127.1 MiB Table 4: innovere_state Rows: 3,874 MyISAM utf8_general_ci 185.1 KiB Table 5: country Rows = 247 MyISAM utf8_persian_ci 6.3 KiB

我刚刚意识到我们有两个国家/地区表?

4

1 回答 1

1

如果我下注,我怀疑问题是您返回的行太多,而您需要使用的是级联下拉菜单。搜索“javascript cascading dropdrown”将显示大量示例,用于 jquery 和其他填充脚本库。

添加

如果你了解“级联下拉菜单”,你就会知道你需要改变什么——为了简单起见,我假设使用 jquery。这个想法是简单地服务于最初只填充顶级(国家)SELECT 的网页。他们通过对国家/地区 SELECT 更改的 jquery 事件处理,当他们选择美国或省份时,您向服务器发出 AJAX 调用以收集“州”,然后选择加拿大等。然后您填充“州/地区”选择这对级联下拉菜单的每个级别也一样。

JQuery(和其他脚本库)拥有使这一切变得简单所需的一切——如果你不使用脚本库——花时间立即学习 JQuery——这将是你学习的最佳时间网站开发。JQuery 被广泛使用是有充分理由的。

于 2013-11-14T19:20:49.453 回答