雖然 query cache 可以提升效能,但如果在測試 API 效能的時候反而會造成困擾,可以用以下語法來清除 query cache
1. RESET QUERY CACHE;
2. FLUSH QUERY CACHE;
wbkuo 發表在 痞客邦 留言(0) 人氣(1,615)
1. 顯示 schema
SHOW COLUMNS FROM `TABLE_NAME`;
wbkuo 發表在 痞客邦 留言(0) 人氣(32)
安裝
$ apt-get install
設定
$ vim ~/.mytop
wbkuo 發表在 痞客邦 留言(0) 人氣(93)
根據官網的定義
LOCK TABLES {table} READ:其他連線可以讀,不能寫
LOCK TABLES {table} WRITE: 其他連線不能讀,不能寫
但發現在特定環境測試的時候,有時候會失效,仔細檢查發現是因為 cache 的問題
當 LOCK TABLES 之後,其他連線進入欲查詢時,如果要 SELECT 的結果有 CACHE 尚未失效,就會直接從 CACHE 拿,造成失效。
不過只要使用 SQL_NO_CACHE 關鍵字,就會正常的被鎖定住了
SELECT SQL_NO_CACHE * FROM {table}
wbkuo 發表在 痞客邦 留言(0) 人氣(72)
$ mysql -u root -p -e 'SHOW VARIABLES WHERE Variable_Name LIKE "%dir"'
Enter password:
+---------------------------+--------------------------------------------------------+
| Variable_name | Value |
+---------------------------+--------------------------------------------------------+
| aria_sync_log_dir | NEWFILE |
| basedir | /usr/local/Cellar/mariadb/10.1.9 |
| character_sets_dir | /usr/local/Cellar/mariadb/10.1.9/share/mysql/charsets/ |
| datadir | /usr/local/var/mysql/ |
| innodb_data_home_dir | |
| innodb_log_arch_dir | ./ |
| innodb_log_group_home_dir | ./ |
| lc_messages_dir | |
| plugin_dir | /usr/local/Cellar/mariadb/10.1.9/lib/plugin/ |
| slave_load_tmpdir | /var/tmp/ |
| tmpdir | /var/tmp/ |
| wsrep_data_home_dir | /usr/local/var/mysql/ |
+---------------------------+--------------------------------------------------------+
wbkuo 發表在 痞客邦 留言(0) 人氣(21)
請編輯 config.inc.php,加上以下這行
$cfg['LoginCookieValidity'] = 14400;
wbkuo 發表在 痞客邦 留言(0) 人氣(671)
以下簡單筆記一下目前我所知道的 SQL 效能調整方法:
1. 找出慢在哪裡?
MySQL: 有 slow query 的 log ,可以執行時間超過幾秒的 SQL 語法要記入 LOG
Oracle: 也有這樣的功能
2. 使用資料庫內建的效能分析工具
MySQL: 內建的為 EXPLAIN 指令,直接將 EXPLAIN 加在要分析的 SQL 語法前面並執行,就會顯示該 SQL 的效能調整建議
Oracle: 內建的似乎叫 EXPLAIN PLAN ,不過我之前是用 PL/SQL,寫完 SQL 直接按快捷鍵就自動分析了
3. 依據建議做調整,然後再進度進行分析,直到效能達到需求或標準為止
這裡可以做的,我目前我所知的為
* 建立索引(如 EXPLAIN 有建議,或是該欄位經常的查詢的需求時)
* SQL 語法的 WHERE 條件中,有建索引的欄位往前搬,效能會好一些
* 如果 EXPLAIN 一直顯示 "Using file sort" 之類的訊息,代表查詢的資料太大,需要使用到外部排序(硬碟排序),可以考慮把記憶體加大
或是看能不能少撈一點資料,讓資料大小可以在記憶體內排序完畢
* 如果可以的話,減少一個 SQL JOIN 的 Table 數量
* 或是將一個 SQL 拆成多個 SQL (這不曉得觀念對不對?)
4. 定期去做 OPTIMIZE
單一表格: OPTIMIZE TABLE <table_name>; (這是 SQL)
所有表格: mysqlcheck -o <db_schema_name> (<-----這是指令)
wbkuo 發表在 痞客邦 留言(2) 人氣(2,015)
http://ithelp.ithome.com.tw/question/10136053?tag=ithome.nq
wbkuo 發表在 痞客邦 留言(0) 人氣(51)
最近在使用 mysqldump 時遇到一些問題,在此做個記錄
1. mysqldump 匯出來的 sql ,若資料欄位中有二進位的欄位,使用 vim 開啟時可能會因為誤判,造成中文字亂碼的問題
2. mysqldump 匯出來的 sql ,請勿請用 phpMyAdmin 匯入,否則可能使二進位的欄位資料損毀
wbkuo 發表在 痞客邦 留言(0) 人氣(53)
資料表使用久了之後,都會有一些零碎的空間,已經刪除的記錄並不會直接從檔案裡被拿掉,而且遺留下原來的空間
會造成效能的問題,也浪費了儲存空間,建議定時要做資料表的最佳化
最佳化指定資料表
下 SQL:OPTIMIZE TABLE `table_name`;
最佳化所有資料表
下命令:mysqlcheck -u root -opr -p --all-database
wbkuo 發表在 痞客邦 留言(0) 人氣(1,647)