㈠ 如何使用 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一个语句的时候很有用