• <menu id="gm402"></menu>
  • <code id="gm402"></code>
  • DBA应该具备哪些能力 MySQL

    作者:11号树屋 / 公众号:zhujzhuo_no11 发布时间:2019-07-10

    如何系统的学习一门知识,具备什么样子?#21738;?#21147;,其实可以去看看这个岗位的招聘要求,回看一些招聘运维DBA的描述以及我们自己的招?#35813;?#36848;,任职的要求有精通MySQL运维,精通数据库原理、复制、高可用、备份等技术,至少熟悉一门编程语言。从这些描述上,我们可以看到一个学习MYSQL的大体方向,简单总结为基础知识(架构和理论知识)、高可用、数据安全(备份恢复)、故障处理(运维能力)、优化、编程能力(系统整合能力)。
    这部分的介绍对于我们自己的业务同学来说也是有用的,?#28909;?#21518;面会说到的一些简单问题,可以不需要直接去问DBA,自己在官网搜一下关键字即可,主动学习么,对自己的知识面扩展也是有益的,别人告诉你的始终是别人的。?#28909;鏻ogtext能存储最大是多少?提交建表语句,json blob text的字段为什么不能有default值?还有一些下面介绍的MySQL配置参数含义都可以在官网查询到,大部分的描述很好理解。言归正传。
    其实MySQL是需要涉及到很多方面的。对?#24067;?#31995;统、网络、数据库、业务知识有多少了解;如何保证高可用;数据安全性;数据一致性;优化。
    先给出如下的几个题目,试试回答一下。
    1、给你一台安装了MySQL的机器,如何快速的熟悉这台机器?做哪些方面的优化?(优化)
    2、备份是怎么做的?如何校验数据一致性?(数据安全)
    3、业务链接MySQL超时?#29616;兀?#22914;何排查?(故障排查)
    4、MySQL5.7新特性都有哪些?(引入新技术提升MySQL性能)
    5、维护MySQL,一般会用到?#21738;?#20123;周边的工具或者自己写的脚本?(自动化)
    6、开发一些实用性的系统??#28909;?#22312;线DDL、日志收集和分析
    7、平时关注的学习网站和blog有哪些?
    我们挑几个问题来解析一下。第一个问题,给你一台安装了MySQL的机器,如何快速的熟悉这台机器?做哪些方面的优化?这个问题看似比较简单,其实需要回答的非常的全面却是需要先整理一下思路的。我们经常打交道的有系统、?#24067;?#32593;络、数据库本身。
    对于运行MySQL的机器,拿到机器首先需要看一下系统。常见的,MySQL一般安装在redhat或者centos操作系统上,?#24067;?#19978;关注CPU、内存、?#25490;獺?#19968;些常用的命令?#27827;布∕egaCli free df )、网络( netstat dstat[内存、cpu、网卡、load])、系统命令(top mpstat iostat vmstat pidstat sar lsof perf iotop)
    需要查看整个系统的负载,查看?#25490;蘄O、CPU、MEM使用情况,具体的优化项可以参考下面的几条
    1)、文件系统类型是XFS、EXT4??#20197;?#21442;数是什么样子的(mount -l或者cat /etc/fstab)
    ?#20197;豖FS参数:
    (rw, noatime,nodiratime,nobarrier)
    ?#20197;豦xt4参数:
    ext4 (rw,noatime,nodiratime,nobarrier,data=ordered)
    2)、 IO调?#20154;?#27861;
    正常情况下请使用deadline ,默认是noop,在SSD?#25490;?#19978;noop也是不错的选择
    echo dealine >/sys/block/{DEV-NAME}/queue/scheduler
    3)、打开文件句柄数 ulimit -n、进程数限制 ulimit -u
    4)、禁用 NUMA,一般也要关闭swap的 vm.swappiness=0。
    5)、?#25490;?#26159;SAS、SSD、PCIE卡,SSD和SAS盘的话是不是有做Raid,raid级别是什么样的?是raid10 raid01 raid50?Raid卡Cache策略?(常用命令:df -h ;fdisk -l ;MegaCli)
    Raid的cache策略和数据一致性校验,可以参考文章:以后补充
    6)、CPU为最大性能模式,一般的CPU是运?#24615;?#30005;源保护模式上,需要在bios上设置,使用最大性能模式(cat /proc/cpuinfo )
    在数据库本身上,需要关注当前MySQL占用?#21738;?#23384;大小?CPU使用情况?#30475;排蘄O大的话是不是由于MySQL引起的?是否?#26032;?#26597;询?当前的连接数是多少?查询的QPS多大?写入TPS多大?#23458;?#21345;流?#30475;?#30340;话是不是由于MySQL的查询返回集合太大?等等。那么常用的查看工具可以搜一下orzdba,这个脚本可以显示一些当前的主要配置参数以及当前机器的load、cpu使用情况、QPS、TPS,以及缓存命?#26032;省?#22522;本可以看到上面的一些MySQL监控项,一个范例截图:
    其他的就是涉及到一些具体参数的配置了,需要进行如下项目的优化:
    1)、使用较大的innodb_buffer_pool_size
    2)、禁用Query Cache(set global query_cache_size=0;set global query_cache_type=off;)
    3)、如果使用SSD或是固态盘需要考虑:
    ? innodb_page_size = 4K 一般都是16K
    ? Innodb_flush_neighbors = 0
    4)、选择合?#23454;哪?#23384;分配算法:jemalloc and tcmalloc
    [mysqld_safe]
    malloc-lib = jemalloc
    或者编译的时候直接用jemalloc编译
    5)、内存分配?#28023;?#20855;体参数的含义这里不做仔细的介绍了,后面可以在官网查看)
    total =
    innodb_buffer_pool_size +
    key_buffer_size +
    innodb_additional_mem_pool_size +
    innodb_log_buffer_size +
    query_cache_size +
    table_open_cache (The number of open tables for all threads)+
    table_definition_cache +
    thread_cache_size (How many threads the server should cache for reuse)+
    max_connections *
    (maximum_thread_stack_size+
    read_buffer_size +
    read_rnd_buffer_size +
    join_buffer_size +
    sort_buffer_size +
    binlog_cache_size +
    thread_stack +
    2 * net_buffer_length (每一个client线程关联一个connection buffer and result buffer,此参数设置这个buffer的最小值,可以增长到max_allowed_packet)+
    tmp_table_size +
    bulk_insert_buffer_size)
    6)、LOG刷新机制
    Redo Logs:
    – innodb_flush_log_at_trx_commit = 1 //最安全
    – innodb_flush_log_at_trx_commit = 2 //  较好性能
    – innodb_flush_log_at_trx_commit = 0 //  最好的性能
    binlog :
    binlog_sync = 1 需要group commit支持,如果没这个功能可以考虑binlog_sync=0来获得较佳性能。
    数据文件:
    innodb_flush_method = O_DIRECT
    7)、优化?#25490;?#30340;IO
    innodb_io_capactiy 在sas 15000转的下配置800就可以了,在ssd下面配置2000以上。
    在MySQL 5.6和5.7:
    innodb_lru_scan_depth = innodb_io_capacity / innodb_buffer_pool_instances
    innodb_io_capacity_max = min(2000, 2 * innodb_io_capacity)
    这里不能配置太大的innodb_io_capacity,否则可能会导致IO负载过大
    8)、使用独立表空间 innodb_file_per_table=1
    9)、配置合理的并发
    innodb_thread_concurrency =并发这个参数在Innodb中变化也是最频繁的一个参数。不同的版本,有可能不同的小版本也有变动。一般推荐:
    5.5 推荐:innodb_thread_concurrency =16 – 32
    5.6-5.7 推荐innodb_thread_concurrency = 36-64
    10)、优化事务隔离级别
    默认是 Repeatable read,可以设置为Read committed
    ?#31995;?#30340;隔离级别 = 较好的性能
    可以看到,这一个题目会引申出来很多的知识,以及如果遇到一个性能问题的具体排查思路,在标准化的安装基础之上,?#24067;?#31995;统参数配置、MySQL参数配置可能都不是关注的重点了,因为是标准化的。因此,需要更多的关注系统负载上,IO、CPU使用情况,一些系统命令?#25925;?#23569;不?#35828;模琈ySQL本身的参数查看orzdba就是很好的辅助工具。
    第二个问题备份是怎么做的?如何校验数据一致性?备份数据一致性校验是我们使用方最关注的。如何保证数据的安全性和一致性?这部?#24535;?#20250;涉及到一些开源工具,逻辑备份mysqldump,备份用的xtrabackup(https://www.percona.com/software/mysql-database/percona-xtrabackup),主从数据一致性校验(pt-table-checksum https://www.percona.com/downloads/percona-toolkit/LATEST/)。这里不对这些工具的原理一一做介绍了,后面?#20174;?#26102;间可以写几篇文章专门介绍工具的使用方法和原理以及使用过程中可能存在的问题。
    第三个问题业务链接MySQL超时?#29616;兀?#22914;何排查?是这部分可以引出网络相关的问题,如何使用ping查看机器之间是否存在丢包,tcpdump的使用等。
    其他问题 MySQL5.7新特性都有哪些?维护MySQL,一般会用到?#21738;?#20123;周边的工具或者自己写的脚本?#31185;?#26102;关注的学习网站和blog有哪些?#21487;?#20110;借助开源工具或者自己写脚本完成日常的工作都是很好的表现,对于学习MySQL来说有几个值得推荐的网站。
    1、https://dev.mysql.com/doc/refman/5.7/en/ 毋庸置疑,第一位的就是官网的文档,很多问题都可以在上面找到答案。
    2、percona 官方blog:https://www.percona.com/blog/
    3、mysql官方bog:http://mysqlserverteam.com/
    除了上面的几个开放性的问题之外,可能还有一些具体的SQL优化、MySQL事务和锁、索引、性能调优和故障处理经验以及高可用等等。因此整体上来说学习MySQL 需要了解?#24067;?#31995;统、网络、MySQL配置、优化以及周边工具的使用和原理。其?#20301;?#38656;要了解业务场景给出解决方案,往架构上面靠拢。最后需要学习一些新技术,如容器、微服务架构。

    关注11号树屋微信公众号,获取更多图文精彩内容


    其他栏目
    一尾中特期期准
  • <menu id="gm402"></menu>
  • <code id="gm402"></code>
  • <menu id="gm402"></menu>
  • <code id="gm402"></code>
  • 广东快乐10分计划软件手机版式 安徽11选5 青海十一选五奖金多少 11选5怎么选中奖率高 四川快乐12规则 胆拖中奖查询 吉林11选5遗漏表 山西快乐10分基本走势 nba比分网即时比分 快乐彩票官网 娱乐场所怎么点钟 通比牛牛 电子游戏cq9跳高高秘诀 甘肃十一选五开奖结果 安徽快三开奖结果