面试题目之查询优化

面试老头问你的时候,优化的问题,这些是一部分,后边的在给吧

安装MySQL后,配置文件my.cnf的路径是:../mysql_files/share/mysql目录中,该目录包含多个配置文件可供参考,有my-large.cnf,my-huge.cnf my-nedium.cnf my-small.cnf分别对应大中小型的数据库分析。

Windows环境下存在于mysql安装目录中的.ini文件。

对性能影响较大的变量主要分为 连接请求变量和缓冲区变量。

连接请求变量

max_connections

MySQL的最大连接数,增加该值增加mysqld 要求的文件描述符的数量。如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。

数值过小会经常出现ERROR 1040: Too many connections错误,可以过’conn%’通配符查看当前状态的连接数量,以定夺该值的大小。

show variables like ‘max_connections’ 最大连接数

show status like ‘max_used_connections’响应的连接数

如下:

mysql> show variables like ‘max_connections‘;

+———————–+——-+

| Variable_name | Value |

+———————–+——-+

| max_connections | 256  |

+———————–+——-+

mysql> show status like ‘max%connections‘;

+———————–+——-+

| Variable_name  | Value |

+—————————-+——-+

| max_used_connections | 256|

+—————————-+——-+

max_used_connections / max_connections * 100% (理想值≈ 85%)

如果max_used_connections跟max_connections相同 那么就是max_connections设置过低或者超过服务器负载上限了,低于10%则设置过大。

缓冲变量(全局缓冲变量)

key_buffer_size

key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)。

key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。

mysql> show variables like ‘key_buffer_size‘;

+——————-+————+

| Variable_name | Value |

+———————+————+

| key_buffer_size | 536870912 |

+———— ———-+————+

key_buffer_size为512MB,我们再看一下key_buffer_size的使用情况:

mysql> show global status like ‘key_read%‘;

+————————+————-+

| Variable_name  | Value |

+————————+————-+

| Key_read_requests| 27813678764 |

| Key_reads   | 6798830 |

+————————+————-+

一共有27813678764个索引读取请求,有6798830个请求在内存中没有找到直接从硬盘读取索引,计算索引未命中缓存的概率:

key_cache_miss_rate =Key_reads / Key_read_requests * 100%,设置在1/1000左右较好

默认配置数值是8388600(8M),主机有4GB内存,可以调优值为268435456(256MB)。

原文发布于微信公众号 - 数据库SQL(SQLdba)

原文发表时间:2016-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏武军超python专栏

2018年8月5日对之前学习python中的问题总结

问题: linux中whereis和which的区别: whereis python     which python whereis是一个文件查找命令,...

955
来自专栏JackeyGao的博客

Celery用户手册 - Tasks

Tasks是Celery 应用的构建块。事实上Celery应用是由一个或多个Task拼装组成的。

1313
来自专栏java一日一条

Java Web 模板代码生成器的设计与实现

项目中需要根据数据库表写很多Meta、Dao、Service代码,其中很多代码都是重复而繁琐的。因此如果有一个模板代码的生成器,就可以一定程度提高开发效率。

1003
来自专栏逆向技术

远程线程注入

一丶远程线程注入的讲解 远程线程注入的原理,我会写一个远程线程开发的例子 我们总共需要几步 /*1.查找窗口,获取窗口句柄*/ /*2.根据...

23410
来自专栏YoungGy

R包简单教程

R包概述 R包是什么 为什么学习R包 R包的结构 R包的工作流程 R包的创建 预先准备 包的创建 DESCRIPTION的编写 数据文件 R函数 R文档 测试R...

30410
来自专栏DOTNET

【翻译】MongoDB指南/CRUD操作(二)

【原文地址】https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,S...

3228
来自专栏我是攻城师

使用Spark SQL的临时表解决一个小问题

4427
来自专栏WindCoder

MySQL数据库对象与应用-MySQL程序开发单元测验

这是微专业参加单元测试后的试题及答案整理,分享出来,供大家参考,所有标红的为答案。

731
来自专栏Python中文社区

简陋的分布式爬虫(附项目代码地址)

專 欄 ❈ 哇咔咔,学习过C, C++, Python, 了解java,html, javascript基础。其中就Python而言,自己写过简单的博客(注册,...

21110
来自专栏黑泽君的专栏

day29_Hibernate复习_01

    功能:Dao层(持久层)框架,封装了JDBC。     思想:整合了ORM思想,以面向对象的思想操作数据库。

621

扫码关注云+社区