统计模块中的insert语句大大减慢了我们网站的速度。由于插入了更多行,问题变得更糟。当我们截断表格时,网站再次加速。我们希望保留数据,但如果可能的话,请加快速度。
db_query("INSERT INTO {accesslog} (title, path, url, hostname, uid, sid, timer, timestamp) values('%s', '%s', '%s', '%s', %d, '%s', %d, %d)", strip_tags(drupal_get_title()), $_GET['q'], referer_uri(), ip_address(), $user->uid, session_id(), timer_read('page'), time());
表格结构:
+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| aid | int(11) | NO | PRI | NULL | auto_increment |
| sid | varchar(64) | NO | | | |
| title | varchar(255) | YES | | NULL | |
| path | varchar(255) | YES | | NULL | |
| url | varchar(255) | YES | | NULL | |
| hostname | varchar(128) | YES | | NULL | |
| uid | int(10) unsigned | YES | MUL | 0 | |
| timer | int(10) unsigned | NO | | 0 | |
| timestamp | int(10) unsigned | NO | MUL | 0 | |
| uri | varchar(255) | YES | | NULL | |
+------------+------------------+------+-----+---------+----------------+
行(当前):522,737
如果您需要其他信息,请与我们联系。
编辑:我对引擎类型进行了一些研究,看起来我收到了混合信息,在这种情况下myisam或innodb更好用...有人能回答吗?编辑2:这是表格上的索引:
+-----------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-----------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| accesslog | 0 | PRIMARY | 1 | aid | A | 522858 | NULL | NULL | | BTREE | |
| accesslog | 1 | accesslog_timestamp | 1 | timestamp | A | 522858 | NULL | NULL | | BTREE | |
| accesslog | 1 | uid | 1 | uid | A | 164 | NULL | NULL | YES | BTREE | |
+-----------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
编辑3:我的老板和我决定做的不是记录搜索引擎机器人。我还在试图找出最好的方法。如果您有任何想法,请告诉我。
答案 0 :(得分:0)
你也可以尝试从db端。只需要确保你在某个地方有备份。
该表是否被严格编入索引?删除一些会给你一个提升。
“我们实际上将此表用于除分析之外的其他事情......就像 显示用户上次查看的项目。 “
给定混合读/写,您也可以尝试更改为innodb引擎,或者拆分它。
@ edit1& 2:尝试一下(确保你备份两次)ALTER TABLE name TYPE = [InnoDB | MyISAM]
,你可能想尝试运行一些db优化scripts并微调一些db配置。
@ edit2:根据你的更新,你的表对我来说很好看。并且瓶颈似乎更有可能在drupal方面从其他表获得变量。 您可以通过在cml和drupal中运行插入查询来计算速度。
一些额外的material