您在這裡

Drupal網站中批量設置Views替換Taxonomy Term分類頁面

James Qi 在 2019年7月23日 - 16:32 發表

  最近發現有一台阿裡雲RDS數據庫服務器負載持續很高,CPU總是占滿,當前連接數超過幾十的時候網站就被卡得不能動了。除了升級RDS配置以外,可以仔細檢查慢查詢日志,發現這種查詢特别多:

SELECT node.title AS node_title, node.nid AS nid, node.sticky AS node_sticky, node.created AS node_created 
FROM node node 
WHERE (( (node.status = 1 OR (node.uid = 0 AND 0 <> 0 AND 0 = 1) OR 0 = 1) AND (node.nid IN (SELECT tn.nid AS nid FROM taxonomy_index tn WHERE ( (tn.tid = '168') ))) )) 
ORDER BY node_sticky DESC, node_created DESC 
LIMIT 11 
OFFSET 2600

  這顯然是一個Drupal網站的分類頁面,翻頁到後面産生的MySQL查詢語句。執行的時間在2-4秒左右。

  但其實分類頁面的排序不重要,而且頁面狀态、當前用戶也基本上是統一的、無需判斷的,所以簡化以上查詢語句成這樣:

SELECT node.title AS node_title, node.nid AS nid, node.language AS node_language 
FROM node node 
WHERE (( (node.nid IN (SELECT tn.nid AS nid FROM taxonomy_index tn WHERE ( (tn.tid = '168') ))) )) 
LIMIT 11 
OFFSET 2600

  執行的時間大約幾十-幾百ms,下降了1、2個數量級,所以這樣的優化是很有效果的。

  查到我以前就寫過幾篇類似博客《Drupal中啟用Views來替代原生的分類頁面》、《替換Views翻頁功能來降低Drupal網站數據庫負載》、《用Devel模塊排查Drupal速度慢等性能問題》。

  于是設置一個站的Views如下:

taxonomy-term.png

  其中紅框是改動了一些的地方,将這樣設置的Views導出、複制到自定義模塊的.views_default.inc文件中,并使用drush cc all批量清理系列站的緩存,就可以把這個Views應用到各個網站中。

 

發表新回應

Plain text

  • 不允許使用 HTML 標籤。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。