【问题标题】:What can I do to speed up the statistics module?我可以做些什么来加快统计模块的速度?
【发布时间】:2011-11-09 14:16:04
【问题描述】:

统计模块中的插入语句大大降低了我们网站的速度。随着插入更多行,问题变得更糟。当我们截断表格时,网站再次加速。我们希望保留数据,但如果可能的话,让它更快。

 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
大小:127.4 MiB

如果您需要更多信息,请告诉我。

编辑:我对引擎类型进行了一些研究,似乎我得到了混合消息,在这种情况下使用 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:我的老板和我决定做的不是登录搜索引擎机器人。我仍在尝试找出最好的方法来做到这一点。如果您有任何想法,请告诉我。

【问题讨论】:

  • 这可能是一个选项,但这不取决于我。我仍然需要加快速度。
  • @Clive 或 Piwik.
  • 尝试分解查询中的每个元素(对ip_address()timer_read() 的调用等),看看它们是否导致了瓶颈。如果是,请找到一种更好的方法来获取该数据。如果不是,请将站点放在更快的服务器上或定期截断表格,这就是您能做的所有事情
  • @JamWaffles:不知道有人为抬头欢呼:)

标签: mysql database drupal optimization


【解决方案1】:

您也可以从数据库端尝试。只要确保您在某处有备份即可。

该表是否被大量索引?删除一些会给你一个提升。

“我们实际上将这张表用于分析之外的其他事情......比如 显示用户最后查看的项目。 "

考虑到混合读/写,你也可以尝试换成innodb引擎,或者拆分它。

@edit1&2:试试看(确保备份两次)ALTER TABLE name TYPE = [InnoDB | MyISAM],您可能想尝试运行一些数据库优化scripts 并微调一些数据库配置。

@edit2:根据您的更新,您的表格对我来说看起来不错。并且瓶颈似乎更有可能在drupal方面从其他表中获取变量。 您可以通过在 cml 和 drupal 中运行插入查询的时间来比较速度。

一些额外的material

【讨论】:

  • 大量索引是什么意思?拆分它是什么意思?
  • 我同意切换到 innodb,因为这是一个写入繁重的表。如果您没有添加任何 Drupal 没有添加的索引,那么索引应该不会太糟糕。此外,拆分桌子会比它的价值更麻烦。
  • 只是为了扩展@gerrlingguy所说的,索引会以写入速度为代价提高读取速度,所以如果你有很多不必要的索引,插入查询会很慢。拆分表参考patitioning。这个解决方案可能有点矫枉过正 ATM,但是一旦你的数据库变得更大,它会给你一些坚实的性能提升。
猜你喜欢
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 2014-09-12
  • 1970-01-01
  • 2011-06-23
  • 2011-10-11
  • 1970-01-01
相关资源
最近更新 更多