㈠ 如何使用 kibana 分析 mysql 數據
Kibana4簡單使用
<center>
# ELK日誌系統使用說明 #
</center>
**k3與k4的對比**
1.界面美觀:Kibana4 至今未提供類似 Kibana3 中的 Query 設置功能,包括 Query 別名和顏色選擇器這兩個常用功能2.日誌顯示:kibana4有高亮顯示
3.頁面設計:Kibana3 就是一個圍繞著 dashboard 構建的單頁應用。在頁面邏輯上,Kibana3比較簡潔,Kibana4稍復雜。
<center>
##一、 系統介紹
</center>
ELK(logstash+elasticsearch+kibana)是一套開源的實時日誌分析系統。目前這套系統已經在小范圍內使用了。針對各位開發人員,無需關心系統底層的實現,只需關注kibana的使用即可。kibana4中,將功能拆分成了搜索(Discover),可視化(Visualize)和儀表盤(Dashboard)三個標簽,我們使用最多的地方即是搜索,目前就給大家主要介紹搜索頁面的使用。
<center>
##二、 kibana4的使用
</center>
登錄入口:運維平台-->應用中心:ELK
地址:https//op.zhubajie.la/
<center>
## 快速查詢項目日誌
</center>
**選擇面板-->選擇項目**
首先選擇面板,搜索框輸入:tags:"項目名" 或host:"項目名" 即可查看對應項目的日誌<center>
## discover 功能 ##
</center>
Discover 標簽頁用於互動式探索你的數據。你可以訪問到匹配得上你選擇的索引模式的每個索引的每條記錄。你可以提交搜索請求,過濾搜索結果,然後查看文檔數據。你還可以看到匹配搜索請求的文檔總數,獲取欄位值的統計情況。如果索引模式配置了時間欄位,文檔的時序分布情況會在頁面頂部以柱狀圖的形式展示出來。
**查看日誌數據**
點擊日誌內容中的小三角,查看日誌詳細內容。
要在單獨的頁面上查看文檔內容,點擊鏈接。你可以添加書簽或者分享這個鏈接,以直接訪問這條特定文檔。
**1) 搜索數據**
在 Discover 頁提交一個搜索,你就可以搜索匹配當前索引模式的索引數據了。
當你提交搜索的時候,直方圖,文檔表格,欄位列表,都會自動反映成搜索的結果。hits(匹配的文檔)總數會在直方圖的右上角顯示。
*在搜索框內輸入請求字元串*:
- **通配符**:用 ? 表示單字母,* 表示任意個字母。比如 fir?t mess*。
- **簡單的文本搜索**:直接輸入文本字元串。比如,如果你在搜索網站伺服器日誌,你可以輸入error 來搜索各欄位中的 error單詞。
- **搜索特定欄位的值**:則在值前加上欄位名。比如 status:200- **范圍搜索**:對數值和時間,[START_VALUE TO END_VALUE]。比如,要查找 4xx 的狀態碼,status:[400 TO 499]。
- **多個檢索條件的組合**:可以使用 NOT, AND 和 OR 來組合檢索,**注意必須是大寫**。比如,要查找 4xx 的狀態碼,還是 php 或 html 結尾的數據, status:[400 TO 499] AND (extension:php OR extension:html)。其中,[] 表示端點數值包含在范圍內,{} 表示端點數值不包含在范圍內。
- 近似搜索:用 ~ 表示搜索單詞可能有一兩個字母寫的不對。比如 frist~;**2) 設置時間過濾器**
默認的時間過濾器設置為最近 15 分鍾。你可以用頁面頂部的時間選擇器(Time Picker)來修改時間過濾器。
**3) 日誌索引設置**
- Nginx日誌索引:[logstash-nginx-*]
- 服務化Nginx日誌索引:[api-nginx-]YYYY.MM.DD- Java日誌索引:[logstash-jetty-]YYYY.MM.DD- php日誌索引:[logstash-php-*]
- mysql日誌索引:[logstash-]YYYY.MM.DD
- 其他日誌:[logstash-]YYYY.MM.DD (註:該索引為系統默認索引,需搜索其他日誌,請按步驟改變索引即可)**4) 保存搜索**
你可以在 Discover 頁載入已保存的搜索麵板,也可以用作 visualizations 的基礎。保存一個搜索,意味著同時保存下了搜索請求字元串和當前選擇的索引模式。
<table>
<td>
保存當前搜索:
1.點擊 Discover 工具欄的 Save Search 按鈕2.輸入一個名稱,點擊 Save。
載入一個已存搜索:
1.點擊 Discover 工具欄的 Load Search 按鈕 。
2.選擇你要載入的搜索。
如果已保存的搜索關聯到跟你當前選擇的索引模式不一樣的其他索引上,載入這個搜索也會切換當前的已選索引模式。
</td>
</table>
**5) 改變你搜索的索引**
當你提交一個搜索請求,匹配當前的已選索引模式的索引都會被搜索。當前模式模式會顯示在搜索欄下方。要改變搜索的索引,需要選擇另外的模式模式。
要選擇另外的索引模式:
(1).點擊 Discover 工具欄的 Settings 按鈕 。
(2).從索引模式列表中選取你打算採用的模式。
**6) 自動刷新頁面**
亦可以配置一個刷新間隔來自動刷新 Discover 頁面的最新索引數據。這回定期重新提交一次搜索請求。
設置刷新間隔後,會顯示在菜單欄時間過濾器的左邊。
要設置刷新間隔:
1.點擊菜單欄右上角的 Time Filter 。
2.點擊 Refresh Interval 標簽。
3.從列表中選擇一個刷新間隔。
要想自動刷新數據,點擊 Auto-refresh 按鈕然後選擇一個自動刷新間隔:
㈡ 如何查看MySQL索引
查看索引
mysql> show index from tblname;
mysql> show keys from tblname;
· Table
表的名稱。
· Non_unique
如果索引不能包括重復詞,則為0。如果可以,則為1。
· Key_name
索引的名稱。
· Seq_in_index
索引中的列序列號,從1開始。
· Column_name
列名稱。
· Collation
列以什麼方式存儲在索引中。在MySQL中,有值『A』(升序)或NULL(無分類)。
· Cardinality
索引中唯一值的數目的估計值。通過運行ANALYZE TABLE或myisamchk -a可以更新。基數根據被存儲為整數的統計數據來計數,所以即使對於小型表,該值也沒有必要是精確的。基數越大,當進行聯合時,MySQL使用該索引的機 會就越大。
· Sub_part
如果列只是被部分地編入索引,則為被編入索引的字元的數目。如果整列被編入索引,則為NULL。
· Packed
指示關鍵字如何被壓縮。如果沒有被壓縮,則為NULL。
· Null
如果列含有NULL,則含有YES。如果沒有,則該列含有NO。
· Index_type
用過的索引方法(BTREE, FULLTEXT, HASH, RTREE)。
· Comment
㈢ 如何用SQLyog來分析MySQL資料庫
SOLyog的下載、安裝以及使用很簡單。我去了相關網站下載,它只有384K位元組大小。它把兩個文件(一個可執行文件.exe和一個動態鏈接庫文件.dll)安裝到C:\Program Files\SQLyog路徑下。然後運行可執行文件。
安裝後沒有必要再訪問該網站了,我訪問該網站是得到了一個消息,說它的域名沒有設置(configured)、登記、或正在建設中。我不清楚這個問題是暫時的還是一直是這樣。該軟體是免費的,並且沒有標志廣告(banner ads),所以它可能是一個特定的尚未最終定型的商業模型。最終可能還是要負費的。
資料庫、表格(table)和列樹(column tree)
該程序一啟動就開始詢問我的登錄到MySOL伺服器的口令。我只需要輸入我的伺服器名字、用戶id和登錄密碼。所有其它的設置都是正確的默認值。然後(當我開始其它事務、重啟幾次、睡了一會之後),我重新運行該程序,這時只需要再次輸入我的登錄密碼。該程序沒有保存密碼的選項,你可以認為這是該程序的一個bug,也可以說是程序的保密特性。
一旦你登錄之後,界面就是很值得注意。MySOL伺服器上所有的資料庫都顯示在一個樹型控制項上。你只能訪問你在登錄時授權的那個資料庫。如果你點開代表授權給你的那個資料庫的樹型結構,你就可以看到一系列代表表格的節點。點開表格節點後,你就可以看到一系列顯示欄位名的節點和另一個代表索引的節點集合。
索引界面絕對是個好東東,這樣你就可以CRUD查詢索引和關鍵字了。這相對前端資料庫如Microsoft Access來說是個提高。如果考慮到MySOL剛剛開始提供對主(primary)和非相關(foreign)關鍵字關系的支持,本程序這部分的設計是很成熟的。在右下方的面板上,有四個標簽頁,即:結果(Result)、消息(Message)、對象(Object)和歷史(History)。
在SQLyog FAQ上,有一種觀點認為該軟體沒有正式歸檔的必要。當然,FAQ(常見問題解答)本身就是一種歸檔。SQLyog的界面非常直觀。我建議你列印一份MySOL文檔(包括SQL特殊語法擴展)。我就是這么做的,它只用了一個半英寸的活頁封面。
最後一步?FAQ還讓人想到一個讓人耳朵起了老繭卻又是正確的Occam's Razor准則——一切超出必要的復雜性都是沒有必要的。我之所以到處「推銷」這個工具,就是因為它可以為我們提供一個可以管理MySOL伺服器上許多資料庫的、簡單的、圖形化的界面。它的速度極快,並且它的拷貝很小(可以放在一張軟盤上)。
SQLyog宣稱自己是一個查詢分析器,實際上它的功能遠遠不止這些。
㈣ mySQL的索引功能
索引是一種特殊的文件(InnoDB 數據表上的索引是表空間的一個組成部分),它們包含著對數據表裡所有記錄的引用指針。索引不是萬能的,索引可以加快數據檢索操作,但會使數據修改操作變慢。每修改數據記錄,索引就必須刷新一次。為了在某種程度上彌補這一缺陷,許多 SQL 命令都有一個 DELAY_KEY_WRITE 項。這個選項的作用是暫時制止 MySQL 在該命令每插入一條新記錄和每修改一條現有之後立刻對索引進行刷新,對索引的刷新將等到全部記錄插入/修改完畢之後再進行。在需要把許多新記錄插入某個數據表的場合,DELAY_KEY_WRITE 選項的作用將非常明顯。另外,索引還會在硬碟上佔用相當大的空間。因此應該只為最經常查詢和最經常排序的數據列建立索引。注意,如果某個數據列包含許多重復的內容,為它建立索引就沒有太大的實際效果。
從理論上講,完全可以為數據表裡的每個欄位分別建一個索引,但 MySQL 把同一個數據表裡的索引總數限制為16個。
1.InnoDB 數據表的索引
與 InnoDB數據表相比,在 InnoDB 數據表上,索引對 InnoDB 數據表的重要性要大得多。在 InnoDB 數據表上,索引不僅會在搜索數據記錄時發揮作用,還是數據行級鎖定機制的苊、基礎。「數據行級鎖定」的意思是指在事務操作的執行過程中鎖定正在被處理的個別記錄,不讓其他用戶進行訪問。這種鎖定將影響到(但不限於)SELECT、LOCKINSHAREMODE、SELECT、FORUPDATE 命令以及 INSERT、UPDATE 和 DELETE 命令。出於效率方面的考慮,InnoDB 數據表的數據行級鎖定實際發生在它們的索引上,而不是數據表自身上。顯然,數據行級鎖定機制只有在有關的數據表有一個合適的索引可供鎖定的時候才能發揮效力。
2.限制
如果 WHERE 子句的查詢條件里有不等號(WHERE coloum !=),MySQL 將無法使用索引。類似地,如果 WHERE 子句的查詢條件里使用了函數(WHERE DAY(column)=),MySQL 也將無法使用索引。在 JOIN 操作中(需要從多個數據表提取數據時),MySQL 只有在主鍵和外鍵的數據類型相同時才能使用索引。
如果 WHERE 子句的查詢條件里使用比較操作符 LIKE 和 REGEXP,MySQL 只有在搜索模板的第一個字元不是通配符的情況下才能使用索引。比如說,如果查詢條件是 LIKE 'abc%『,MySQL 將使用索引;如果查詢條件是 LIKE '%abc』,MySQL 將不使用索引。
在 ORDER BY 操作中,MySQL 只有在排序條件不是一個查詢條件表達式的情況下才使用索引。(雖然如此,在涉及多個數據表查詢里,即使有索引可用,那些索引在加快 ORDER BY 方面也沒什麼作用)。如果某個數據列里包含許多重復的值,就算為它建立了索引也不會有很好的效果。比如說,如果某個數據列里包含的凈是些諸如 「0/1」 或 「Y/N」 等值,就沒有必要為它創建一個索引。 1.普通索引
普通索引(由關鍵字 KEY 或 INDEX 定義的索引)的唯一任務是加快對數據的訪問速度。因此,應該只為那些最經常出現在查詢條件(WHERE column =)或排序條件(ORDER BY column)中的數據列創建索引。只要有可能,就應該選擇一個數據最整齊、最緊湊的數據列(如一個整數類型的數據列)來創建索引。
2.唯一索引
普通索引允許被索引的數據列包含重復的值。比如說,因為人有可能同名,所以同一個姓名在同一個「員工個人資料」數據表裡可能出現兩次或更多次。
如果能確定某個數據列將只包含彼此各不相同的值,在為這個數據列創建索引的時候就應該用關鍵字UNIQUE 把它定義為一個唯一索引。這么做的好處:一是簡化了 MySQL 對這個索引的管理工作,這個索引也因此而變得更有效率;二是 MySQL 會在有新記錄插入數據表時,自動檢查新記錄的這個欄位的值是否已經在某個記錄的這個欄位里出現過了;如果是,MySQL 將拒絕插入那條新記錄。也就是說,唯一索引可以保證數據記錄的唯一性。事實上,在許多場合,人們創建唯一索引的目的往往不是為了提高訪問速度,而只是為了避免數據出現重復。
3.主索引
在前面已經反復多次強調過:必須為主鍵欄位創建一個索引,這個索引就是所謂的「主索引」。主索引與唯一索引的唯一區別是:前者在定義時使用的關鍵字是 PRIMARY 而不是 UNIQUE。
4.外鍵索引
如果為某個外鍵欄位定義了一個外鍵約束條件,MySQL 就會定義一個內部索引來幫助自己以最有效率的方式去管理和使用外鍵約束條件。
5.復合索引
索引可以覆蓋多個數據列,如像 INDEX (columnA, columnB) 索引。這種索引的特點是 MySQL 可以有選擇地使用一個這樣的索引。如果查詢操作只需要用到 columnA 數據列上的一個索引,就可以使用復合索引 INDEX(columnA, columnB)。不過,這種用法僅適用於在復合索引中排列在前的數據列組合。比如說,INDEX (A,B,C) 可以當做 A 或 (A,B) 的索引來使用,但不能當做 B、C 或 (B,C) 的索引來使用。 在為 CHAR 和 VARCHAR 類型的數據列定義索引時,可以把索引的長度限制為一個給定的字元個數(這個數字必須小於這個欄位所允許的最大字元個數)。這么做的好處是可以生成一個尺寸比較小、檢索速度卻比較快的索引文件。在絕大多數應用里,資料庫中的字元串數據大都以各種各樣的名字為主,把索引的長度設置為10~15 個字元已經足以把搜索范圍縮小到很少的幾條數據記錄了。在為 BLOB 和 TEXT 類型的數據列創建索引時,必須對索引的長度做出限制;MySQL 所允許的最大索引全文索引文本欄位上的普通索引只能加快對出現在欄位內容最前面的字元串(也就是欄位內容開頭的字元)進行檢索操作。如果欄位里存放的是由幾個、甚至是多個單詞構成的較大段文字,普通索引就沒什麼作用了。這種檢索往往以的形式出現,這對 MySQL 來說很復雜,如果需要處理的數據量很大,響應時間就會很長。
這類場合正是全文索引(full-textindex)可以大顯身手的地方。在生成這種類型的索引時,MySQL 將把在文本中出現的所有單詞創建為一份清單,查詢操作將根據這份清單去檢索有關的數據記錄。全文索引即可以隨數據表一同創建,也可以等日後有必要時再使用下面這條命令添加:
ALTER TABLE tablename ADD FULLTEXT(column1,column2)有了全文索引,就可以用 SELECT 查詢命令去檢索那些包含著一個或多個給定單詞的數據記錄了。下面是這類查詢命令的基本語法:
SELECT * FROM tablename
WHERE MATCH (column1,column2) AGAINST('word1','word2','word3')
上面這條命令將把 column1 和 column2 欄位里有 word1、word2 和 word3 的數據記錄全部查詢出來。
註解:InnoDB 數據表不支持全文索引。 只有當資料庫里已經有了足夠多的測試數據時,它的性能測試結果才有實際參考價值。如果在測試資料庫里只有幾百條數據記錄,它們往往在執行完第一條查詢命令之後就被全部載入到內存里,這將使後續的查詢命令都執行得非常快--不管有沒有使用索引。只有當資料庫里的記錄超過了 1000 條、數據總量也超過了 MySQL 伺服器上的內存總量時,資料庫的性能測試結果才有意義。
在不確定應該在哪些數據列上創建索引的時候,人們從 EXPLAIN SELECT 命令那裡往往可以獲得一些幫助。這其實只是簡單地給一條普通的 SELECT 命令加一個 EXPLAIN 關鍵字作為前綴而已。有了這個關鍵字,MySQL 將不是去執行那條 SELECT 命令,而是去對它進行分析。MySQL 將以表格的形式把查詢的執行過程和用到的索引等信息列出來。
在 EXPLAIN 命令的輸出結果里,第1列是從資料庫讀取的數據表的名字,它們按被讀取的先後順序排列。type列指定了本數據表與其它數據表之間的關聯關系(JOIN)。在各種類型的關聯關系當中,效率最高的是 system,然後依次是 const、eq_ref、ref、range、index 和 All(All 的意思是:對應於上一級數據表裡的每一條記錄,這個數據表裡的所有記錄都必須被讀取一遍——這種情況往往可以用一索引來避免)。
possible_keys 數據列給出了 MySQL 在搜索數據記錄時可選用的各個索引。key 數據列是 MySQL 實際選用的索引,這個索引按位元組計算的長度在 key_len 數據列里給出。比如說,對於一個 INTEGER 數據列的索引,這個位元組長度將是4。如果用到了復合索引,在 key_len 數據列里還可以看到 MySQL 具體使用了它的哪些部分。作為一般規律,key_len 數據列里的值越小越好。
ref 數據列給出了關聯關系中另一個數據表裡的數據列的名字。row 數據列是 MySQL 在執行這個查詢時預計會從這個數據表裡讀出的數據行的個數。row 數據列里的所有數字的乘積可以大致了解這個查詢需要處理多少組合。
最後,extra 數據列提供了與 JOIN 操作有關的更多信息,比如說,如果 MySQL 在執行這個查詢時必須創建一個臨時數據表,就會在 extra 列看到 usingtemporary 字樣。
㈤ 如何看mysql sql查詢語句用了哪些索引如何分析查詢語句
運行explain + SQL語句,例如:
explain select * from students where phone like '45%'G
圖中
possible_keys:可能被利用的索引名
key:被利用的索引名
rows:掃描的行數,1表示只掃描了一行說明充分利用了索引,此數自然越少越好
還有查詢耗時等等都可為查詢語句效率分析提供參數依據
㈥ 如何理解並正確使用mysql索引
索引是指把你設置為索引的欄位A的內容儲存在一個獨立區間S里,裡面只有這個欄位的內容。在找查這個與這個欄位A的內容時會直接從這個獨立區間里查找,而不是去到數據表裡查找。找到的這些符合條件的欄位後再讀取欄位A所指向真實的數據記錄的物理地址,再把對應的數據內容輸出。 如果你查找的不是索引的欄位那麼他會從數據表裡面查找。因為數據表有很多不相關的欄位,資料庫程序是不會省略不查找。要判斷那些不相關的欄位以及多次在記錄中跳轉是花費一定的資源的。 當然不是設置越多索引就越好。
㈦ 如何理解並正確使用MySql索引
MySQL索引類型包括:
(1)普通索引
這是最基本的索引,它沒有任何限制。它有以下幾種創建方式:
◆創建索引
CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR類型,length可以小於欄位實際長度;如果是BLOB和TEXT類型,必須指定 length,下同。
◆修改表結構
ALTER mytable ADD INDEX [indexName] ON (username(length))
◆創建表的時候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) ); 刪除索引的語法:
DROP INDEX [indexName] ON mytable;
(2)唯一索引
與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創建方式:
◆創建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
◆修改表結構
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
㈧ 如何分析mysql
如何分析mysql
A、設置索引項,應該是出現在where後面的列,或者連接字句中出現的列;
B、使用唯一索引,索引的基數越大,索引查詢的效果越好,舉例:查詢條件中含有索引欄位和非索引欄位的時候,會優先走索引篩選出數據,然後在數據中回表過濾沒有走索引的欄位,但是Mysql任務,如果索引篩選出的數據量大於20%,會認為此時走索引效果不如全表掃描,繼而放棄索引,走全表掃描來查詢;
C、使用短索引,例如一個屬性200多位,其實索引只要創建前幾位效果會好;
D、最左原則,組合索引中,靈活運用最左前綴;
E、不要過度使用索引,索引會佔用空間,影響寫入的速度;
㈨ 怎樣分析mysql的性能並優化
第一優化你的sql和索引;
第二加緩存,memcached,redis;
第三以上都做了後,還是慢,就做主從復制或主主復制,讀寫分離,可以在應用層做,效率高,也可以用三方工具,第三方工具推薦360的atlas,其它的要麼效率不高,要麼沒人維護;
第四如果以上都做了還是慢,不要想著去做切分,mysql自帶分區表,先試試這個,對你的應用是透明的,無需更改代碼,但是sql語句是需要針對分區表做優化的,sql條件中要帶上分區條件的列,從而使查詢定位到少量的分區上,否則就會掃描全部分區,另外分區表還有一些坑,在這里就不多說了;
第五如果以上都做了,那就先做垂直拆分,其實就是根據你模塊的耦合度,將一個大的系統分為多個小的系統,也就是分布式系統;
第六才是水平切分,針對數據量大的表,這一步最麻煩,最能考驗技術水平,要選擇一個合理的sharding key,為了有好的查詢效率,表結構也要改動,做一定的冗餘,應用也要改,sql中盡量帶sharding key,將數據定位到限定的表上去查,而不是掃描全部的表;
mysql資料庫一般都是按照這個步驟去演化的,成本也是由低到高;
㈩ 什麼工具可以分析mysql慢查詢日誌
一、MySQL資料庫有幾個配置選項可以幫助我們及時捕獲低效SQL語句1,slow_query_log這個參數設置為ON,可以捕獲執行時間超過一定數值的SQL語句。2,long_query_time當SQL語句執行時間超過此數值時,就會被記錄到日誌中,建議設置為1或者更短。3,slow_query_log_file記錄日誌的文件名。4,log_queries_not_using_indexes這個參數設置為ON,可以捕獲到所有未使用索引的SQL語句,盡管這個SQL語句有可能執行得挺快。二、檢測mysql中sql語句的效率的方法1、通過查詢日誌(1)、Windows下開啟MySQL慢查詢MySQL在Windows系統中的配置文件一般是是my.ini找到[mysqld]下面加上代碼如下log-slow-queries=F:/MySQL/log/mysqlslowquery。loglong_query_time=2(2)、Linux下啟用MySQL慢查詢MySQL在Windows系統中的配置文件一般是是my.cnf找到[mysqld]下面加上代碼如下log-slow-queries=/data/mysqldata/slowquery。loglong_query_time=2說明log-slow-queries=F:/MySQL/log/mysqlslowquery。為慢查詢日誌存放的位置,一般這個目錄要有MySQL的運行帳號的可寫許可權,一般都將這個目錄設置為MySQL的數據存放目錄;long_query_time=2中的2表示查詢超過兩秒才記錄;2.showprocesslist命令SHOWPROCESSLIST顯示哪些線程正在運行。您也可以使用mysqladminprocesslist語句得到此信息。各列的含義和用途:ID列一個標識,你要kill一個語句的時候很有用