美文网首页python机器学习爬虫
关于MySQL优化监控参数、tomcat优化、zabbix企业级

关于MySQL优化监控参数、tomcat优化、zabbix企业级

作者: 朱溪江 | 来源:发表于2019-04-07 18:48 被阅读104次

    一、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配置的情况下匹配顺序为:首先匹配 =,其次匹配^~, 其次是按正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
    

    相关文章

      网友评论

        本文标题:关于MySQL优化监控参数、tomcat优化、zabbix企业级

        本文链接:https://www.haomeiwen.com/subject/buasiqtx.html