一、MySQL优化
1.开启查询缓存
每次查询数据不会操作表,而是先查询缓存
2.只有一行数据时,使用limit 1,当找到时,不会再往下检索
3.为经常搜索的数据创建索引
4.避免select *
5.垂直分割
“垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。(以前,在银行做过项目,见过一张表有100多个字段,很恐怖)
6.选择正确的搜索引擎
在 MySQL 中有两个存储引擎 MyISAM 和 InnoDB,每个引擎都有利有弊。
MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。
InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。他是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。
下面是MySQL的手册
- target=”_blank”MyISAM Storage Engine
- InnoDB Storage Engine
二、关于mysql监控的性能参数:
四大性能指标:
1.查询吞吐量
Com_select:select查询语句个数/每秒
Com_insert:insert操作语句个数/每秒
Com-update:update操作语句个数/每秒
Com-delete:delete操作语句个数/每秒
Questions:查询语句总量
mysqladmin -uread -p123456 -h47.98.97.124 extended-status | grep Com_select
| Com_select | 18484 |
mysqladmin -uread -p123456 -h47.98.97.124 extended-status | grep Com_update
| Com_update | 3000 |
mysqladmin -uread -p123456 -h47.98.97.124 extended-status | grep Com_insert
| Com_insert | 1054 |
mysqladmin -uread -p123456 -h47.98.97.124 extended-status | grep Com_delete
| Com_delete | 198 |
mysqladmin -uread -p123456 -h47.98.97.124 extended-status | grep Questions
| Questions | 723868 |
注:
1. Writes = Com_insert + Com_update + Com_delete,如果在监控mysql吞吐量写操作的时候可以将insert
update、delete数值进行合并。
2. Questions是反映当前查询数量,设置告警非常必要,查询量的骤降,可能就预示着某个严重的问题。
2.查询执行性能
Slow_queries:慢查询数量
mysqladmin -uread -p123456 -h47.98.97.124 extended-status | grep Slow_queries
| Slow_queries
3.连接情况
Threads_connected:当前打开的数据库连接数
max_connections:数据库当前的最大连接数
mysqladmin -uread -p123456 -h47.98.97.124 extended-status | grep -i connect
| Aborted_connects | 0 |
| Connections | 572 |
| Max_used_connections | 4 |
| Ssl_client_connects | 0 |
| Ssl_connect_renegotiates | 0 |
| Ssl_finished_connects | 0 |
| Threads_connected | 2 |
检查并设置连接限制
监控客户端连接情况相当重要,因为一旦可用连接耗尽,新的客户端连接就会遭到拒绝。MySQL 默认的连接数限制为 151。
查询最大连接数
方法一:
MariaDB [(none)]> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+
方法二:
mysql -uread -p123456 -h47.98.97.124 -e "show variables like 'max_connections'"|grep max_connections
max_connections 151
修改连接数
MariaDB [(none)]> set global max_connections = 200;
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 200 |
+-----------------+-------+
1 row in set (0.00 sec)
4.缓冲池使用情况
缓存命中率
缓冲池是一块内存区域,在对数据库进行读取操作时,首先将数据从磁盘中读取到缓冲池中,那缓冲池命中率则是客户端请求的数据在直接在缓冲池获取的比例。想象下如果缓冲池命中率很低,大部分数据都要从磁盘读取,可想而知一个数据库的性能。作为一个mysql OLTP系统,缓冲命中率最好在百分99以上。
mysql> show engine innodb status\G;
QPS(增删改查);MySQL请求流量带宽;响应流量带宽,主从状态,TPS(每秒事务的处理能力),监控缓冲池使用情况,缓存碎片,慢查询数量,当前连接数,吞吐量,端口服务状态,mysql正常运行的时间
吞吐量: questios/uptime 查询总量/服务运行时间
max_connections 默认为151 监控可用连接的数量 设置报警 在my.conf修改适当的连接数 在连接数接近151报警,调整最大连接数,提高数据库性能
三、zabbix企业级监控软件
zabbix优点:
开源,无软件成本投入 Server 对设备性能要求低
支持设备多,自带多种监控模板 支持分布式集中管理,有自动发现功能,可以实现自动化监控
开放式接口,扩展性强,插件编写容易
当监控的 item 比较多服务器队列比较大时可以采用被动状态,被监控客户端主动 从server 端去下载需要监控的 item 然后取数据上传到 server 端。 这种方式对服务器的负载比较小。
Api 的支持,方便与其他系统结合
Zabbix 缺点
需在被监控主机上安装 agent,所有数据都存在数据库里, 产生的数据据很大,瓶颈主要在数据库
zabbix监控系统监控对象
数据库:mysql mariadb oracle sql server
应用软件:nginx apache php tomcat agent
集群: lvs keepalived haproxy
虚拟化: VMware kvm
操作系统:Linux Unix
硬件:服务器 cpu 内存 网络设备
网络:网络环境
Zabbix proxy
一个帮助Zabbix Server收集数据,分担Zabbix Server的负载的程序 Zabbix Proxy是一个可以从一个或多个受 监控设备收集监控数据,并将信息发送到Zabbix sever的进程,基本上是代表sever工作的。 所有收集的数据都 在本地进行缓存,然后传送到proxy所属的Zabbix sever。 部署Proxy是可选的,,但是可能非常有益于分散单 个Zabbix sever的负载。 如果只有proxy收集数据,sever上的进程就会减少CPU消耗和磁盘I / O负载。 Zabbix proxy是完成远程区域、分支机构、没有本地管理员的网络的集中监控的理想解决方案。 Zabbix proxy需要使用独立的数据库
1.你们公司有多少台服务器?
30台物理 20台云服务器(阿里云)
2.你们公司的业务 产品日活跃数
3.内核参数优化都做过什么?
ulimit -n 文件最大打开数 解决高并发下too many opens的问题
4.阿里云经典网络和专有网络的区别?
经典网络:IP地址由阿里云统一分配,配置简便,使用方便,适合对操作易用性要求比较高、需要快速使用 ECS 的用户。
专有网络:是指逻辑隔离的私有网络,您可以自定义网络拓扑和 IP 地址,支持通过专线连接。适合于熟悉网络管理的用户。
5.redis主从复制的原理?
6.谈谈zabbix?
7.数据库垂直分割?
8.elk日志格式是怎么规定的? 在logstash中配置input
9.etcd通信原理?
10.nginx负载均衡如何检测后端服务器状态?
11.nodeport占用端口太多?
12.keepalived配置文件?
13.文件最大打开数,用什么用户去设置?
14.sar 命令查看网络流量
15.写过的剧本有哪些? ansible整个工作流程及模块得很熟悉?
16.大版本升级带来的问题?
17.你们公司mysql都监控什么参数?
QPS(增删改查);MySQL请求流量带宽;响应流量带宽,主从状态,TPS(每秒事务的处理能力),监控缓冲池使用情况,缓存碎片,慢查询数量,当前连接数,吞吐量,端口服务状态,mysql正常运行的时间
show global status like '%com%';
show global status like 'Slow_queries';
吞吐量: questios/uptime 查询总量/服务运行时间
max_connections 默认为151 监控可用连接的数量 设置报警 在my.conf修改适当的连接数
18.你们公司的数据库怎么备份?
使用ansible批量备份数据库服务器 周一全备 每天增备
至于恢复也是ansible批量恢复 不用命令行手敲
详细命令用的是mysqldump热备
19.proxy_pass 匹配
20.ansible怎么使用?
连接其他服务器 批量查看服务器性能 批量重启服务组件(批量关闭selinux/firewalld,k8s,批量启动zabbix-agent/logstash,mysql,nginx,tomcat)
用的最多的是copy和shell模块
剧本:
Web服务的安装部署、数据库服务器的批量备份
21.三种在CDN环境下获取用户IP方法总结
1 CDN自定义header头
优点:获取到最真实的用户IP地址,用户绝对不可能伪装IP
缺点:需要CDN厂商提供
2 获取forwarded-for头
优点:可以获取到用户的IP地址
缺点:程序需要改动,以及用户IP有可能是伪装的
3 使用realip获取
优点:程序不需要改动,直接使用remote_addr即可获取IP地址
缺点:ip地址有可能被伪装,而且需要知道所有CDN节点的ip地址或者ip段
22.Nginx Location 配置
语法规则:
location [=|||!|!|^~] /uri/ {
...
}
= 表示精确匹配,优先级也是最高的
^~ 表示uri以某个常规字符串开头,理解为匹配url路径即可
~ 表示区分大小写的正则匹配
~* 表示不区分大小写的正则匹配
!~ 表示区分大小写不匹配的正则
!~* 表示不区分大小写不匹配的正则
/ 通用匹配,任何请求都会匹配到
Location优先级:
= 大于 ^~ 大于 ~|~*|!~|!~* 大于 /
多个location配置的情况下匹配顺序为:首先匹配 =,其次匹配^~, 其次是按正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
网友评论