最近老是有一台阿裡雲的RDS數據庫服務器有偶然主備切換的情況,網站也有偶爾很慢的情況,總體這台RDS的負載很輕,就是不知道偶爾有什麼SQL語句觸發了問題,這些天和同事一起排查、測試,把一些辦法記錄下來:
- Drupal站的Views是檢查重點,檢測辦法還是以開啟Devel插件為主,尋找慢查詢語句,找到對應Views來改進;
- 在Views中使用Views PHP字段,發現會讓Litepager失效,還有查詢的Limit消失,改用views-view-field--field_name.tpl.php可以解決;
很長時間以來,我們在做MySQL數據轉移的時候都是按照[[MySQL設置]]這篇文章裡面的說法:
導出備份數據
mysqldump -h 服務器IP地址 -u 用戶名 -p 密碼 --opt 數據庫名>備份數據庫名
例如:
mysqldump -h localhost -u root -p --opt food>food2007-08-24-04.sql
這條命令将服務器localhost上的food這個數據庫備份到本地計算機當前目錄的f
最近寫了幾段PHP程序,給同事來導入數據到MySQL數據庫,同事偶爾反映遇到這樣類似的報錯:
PDOException: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'state' at row 1: UPDATE `table` SET `address` = 'xxx', `state` = '過長内容', `id` = 
這段時間我們有個網站不斷更新内容,流量在不斷增長的同時,也引來了大量采集者,現在的采集者已經非常專業了,IP池不斷更換,User Agent也随機變化,甚至Referer也做了不同的僞裝,讓我們花了很多時間來分析Apache日志,不斷修改屏蔽條件,鬥智鬥勇。先以為是百度爬蟲太快,把百度爬蟲進行了專門的臨時503處理,360爬蟲幹脆全部屏蔽了,但發現還是不行,非正規搜索引擎的采集者帶來的麻煩依然不斷。🤔
為了不影響用戶訪問,下血本把阿裡雲服務器從8核16G升級為16核32G,基本可以解決ECS負載飙升的問題,但RDS數據庫服務器還是會遇到查詢語句堆積的情況,我們
最近一直在為降低MySQL服務器負載努力,Drupal網站中主要是排查Views引起的性能問題,而MediaWiki中也有一個與Drupal的Views對應的工具:Dynamic Page List (DPL動态頁面列表),既可以靈活運用得到希望的信息展示效果,但同時也容易引起數據庫負載過高、性能下降。
當網站打開很慢的時候,還是需要查看阿裡雲RDS數據管理控制台DMS(Data Management Service),查看診斷報告或者當前實例會話,查看慢查詢語句,例如發現大量這樣的語句:
SELECT DISTINCT `jing
最近還在設法降低Drupal網站的MySQL負載,前些天嘗試了安裝entity cache,一般情況下可以把一個頁面的70-120個mysql查詢減少10個左右,然後把memcache使用的内存從1G增加到2G,應該會有一些幫助。
今天再次打開devel查詢,發現多語言網站的頁面中drupal_lookup_path特别多,50種語言就需要有50個這種查詢,而且每個查詢的語言代碼不同,不能很好利用MySQL的查詢緩存機制。
其實這個查詢語句:
SELECT alias FROM url_alias WHERE
Drupal的Views是個非常強大、靈活的工具,但用得不合适也可能導緻數據庫負載的飙升。最近把Drupal站啟用UTF8MB4支持,轉換程序自動把以前的MyISAM引擎轉為InnoDB了,也因此引起阿裡雲RDS的IOPS升高。
又試了一些調整RDS參數等,無效。再看了一些資料、觀察了RDS的進程,還是一些Views的消耗大,特别是數據量大的站。以前在Drupal 6時就在個别網站中啟用過views_litepager這個插件,來替換Views本身的翻頁,犧牲了查看一共有多少頁的功能,不再運行select count(*) ... 這個在InnoDB引擎消耗很
今年以來将我們以前托管或者租用的服務器全面轉向阿裡雲,除了采用ECS服務器以外,還有一項重要的是采用了RDS數據庫服務器,這對于服務的穩定性、各項指标的監控、調優等都有幫助。
不過随着近期更多數據
以前就用過自己搭建MySQL服務器的兩種存儲引擎MyISAM和InnoDB(也用過一點Memory方式),在今年初轉向阿裡雲關系型數據庫服務RDS的時候,看到可調參數中有一個TokuDB,不過不太了解也沒有管。
最近同事轉給我阿裡雲介紹TokuDB的文章,其中壓縮存儲的特性對我們來說很有吸引力,因為我們的數據庫一般都偏大,已經轉到阿裡雲的就有幾百個GB了,加上以後要轉的肯定是TB數量級的,而且目前還是用的MyISAM,如果用InnoDB的話,那還要擴大數倍,僅僅是存儲的費用就讓人難以承受。但MyISAM存在表容易損壞的問題,往後用的人越來越少,Drupal 7
以前使用的MySQL存儲引擎考慮到用多塊硬盤放置各個庫以便分散負載都是固定為MyISAM,現在搬遷到阿裡雲RDS後,考慮到查詢效率及空間大小也保持繼續用MyISAM。不過今天同事發現一個銷售數據的網站在購物車結算的時候報錯:
PDOException: SQLSTATE[HY000]: General error: 1785 When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommit