* mysql> show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];选项解析:IN 'log_name' 指定要查询的binlog文件名(不指定就是第一个binlog文件)FROM pos 指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)LIMIT [offset,] 偏移量(不指定就是0)row_count 查询总条数(不指定就是所有行)* cmd里:mysqlbinlog --start-datetime="2021-06-11 17:30:00" --stop-datetime="2021-06-11 18:00:00" "C:\ProgramData\MySQL\MySQL Server 8.0\Data\SZ-XXJSZX-03179-bin.000002"** 给mysql的prompt也设置颜色在.bashrc中添加以下设置即可开启颜色:alias mysql=$(echo -e 'mysql --prompt="\x1B[01;32m(\N)\x1B[0m \x1B[34m[\d]\x1B[0m> "')*《MySQL 性能调优与架构设计》《MySQL 数据库性能优化之SQL优化》【目标:减少磁盘IO次数,降低CPU计算】1. 使用explain收集执行计划2. 停掉联网,整理服务器磁盘碎片【数据类型选择】3.Double 少用,存储长度大,精确性差4.Decimal不要用在固定精度的小数上,乘以固定倍数以整数存储5.TinyInt/Int/BigInt 在数据量大时,建议严格区分使用,无负数时,加上unsigned6.text 处理性能低于 char, varchar7.char 用于定长字段,varchar 用于不定长,要设定合适的最大长度。8.date < timestamp < datetime (存储空间), 不建议 int 代替 unix timestamp, 数据不直观9.enum 用于存储‘状态字段’,省空间,易增改,不需要重建表数据set  用于存储可预先定义的属性数据,少空间,易操作10.LOB 类型数据不建议存入数据库,存储其指针。LOB, text, varchar超大字段,非要存表时最好拆分存储在独立表中。与常用数据隔开,使用常用数据每行数据量小,每页存储行数就增多,增加缓存命中率。11.latin1 用于纯拉丁字符,无其它字符时不用 UTF8 或其它UNICODE字符,以节省空间【语句优化】12. minus,order by, group by, distinct 消耗CPU大户, union, intersect 也是13. order by 可以省略的情况:知道索引已经 “排序” , 14. select * 少用, 当存在 order by 时会影响排序效率15. count(1), count(column) 有时并不比 count(*) 快16. join 代替 子查询(Sub-Queries),避免在内存中创建临时表17. or, in, not in少用, 尽量用 union, union all18. where name like "MySQL%" 用 where name >= "MySQL" and name < "MySQM"19. union 会进行结果集合的唯一性过滤,需要排序,如果确认结果不重复或不在乎重复,使用 union all20.update语句,只更改要求的字段,不要更改全部字段,否则会影响性能,产生大量日志。21. 类型转换可能导致无法使用索引。对传参进行转换,不要对column字段转换。22.优先优化高并发的SQL,而不是执行频率低的某些‘大’SQL23.limit, top 用于分批处理数据,避免向客户端返回大数据量while(1){mysql_query("delete from a where date <= '2021-06-21' limit 1000")if (mysql_affected_rows() == 0)) break;usleep(50000);      //每次暂停一段时间,释放表让其他进程/线程访问。}【系统功能】24.表变量 代替 临时表DECLARE @temp table 代替 SELECT into #name from tablehttps://www.cnblogs.com/ericli-ericli/p/6826646.html数据库大时,非要建临时表,使用  select into #name 代替 create table #name,避免造成大量 log ,以提高速度。数据量不大(建议1000条内),则用 create table, 可以缓和系统表资源。25.游标(CURSOR)尽量避免使用游标,因为游标的效率较差。不建议10000条数据以上使用游标。26.基于集基于集的方法通常优于游标或临时表。https://blog.csdn.net/weixin_39737757/article/details/11478672327.索引select快,insert、update、delete慢。一个表的索引不宜超过6个。索引不能包含NULL值的列,见【适度冗余】。复合索引,见【适度冗余】。短索引:如果一个列的前10或20个字符固定相同,可能指定前缀长度,使用短索引,提高查询速度,节省空间和IO。避免频繁更新聚集索引(主键索引)28.锁表锁:开销小,锁定粒度大,发生死锁概率高,相对并发也低。行锁:开销大,锁定粒度小,发生死锁概率低,相对并发也高。表锁:lock table ... unlock tables行锁:共享锁(S):select * from table_name where ... lock in share mode排他锁(X):select * from table_name where ... for updatehttps://www.cnblogs.com/chenqionghe/p/4845693.html29.事务(transaction) 与锁定表(1)事务默认锁定数据库,可以使用锁定表的方式,缓解多用户相互干扰:lock table table_name write selecct * from table_name where ......unlock tables(2)事务分为四种隔离级别:https://www.cnblogs.com/fjdingsd/p/5273008.html① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。② Repeatable read (可重复读):可避免脏读、不可重复读的发生。③ Read committed (读已提交):可避免脏读的发生。④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。set  [glogal | session]  transaction isolation level 隔离级别名称(如repeatable read);级别越高,数据越安全可靠,但系统性能越差。(3)避免大事务操作,提高系统并发能力。30.外键https://www.cnblogs.com/tearer/archive/2010/07/25/1784896.html适用性能要求不高,安全要求高的系统。能增强数据关联性,保证数据一致性和完整性。select快,insert、update、delete慢。开发难度大。【适度冗余】  31.相同的column存储在两张不同的table中,减少需要通过join 2张(或更多)大表的方式来获取独立小字段.因为join的记录很大,造成大量IO。同时设定column字段 not null, 确保更新时冗余字段也更新。虽然 MySQL null类型会进入索引,但如果是组合索引,null字段会影响整个索引效率。null在索引中的处理也会占用额外空间。32.Index 索引原则上用于数据量大、检索需求大,更新频率小的场景。Index 索引上避免:Index(column)使用null值,计算操作,数据类型转换、使用函数、使用not、<>、!=、is null、is not null,33.联合索引,也叫复合索引如index(name,age),1 where name = ? and age =? # 走组合索引2 where age =? and name = ? # 走组合索引3 where name = ? # 走组合索引4 where age =? # 不走组合索引,因为不是左前缀【参数优化】34.query_cache_size/query_cache_type(global)只适用于 select 语句,检索需求大,更新频率小的场景query_cache_size经验大小256M,通过计算命中率(Qcache_hits/(Qcache_hits+Qcache_inserts)*100)调整大小,query_cache_type:0(OFF)   :完全不用1(ON)    :除显式要求不用(sql_no_cache)之外,其它select都使用query_cache2(DEMOND):只有显式需要使用(sql_cache)时才用35.query_cache_limit = 1M查询缓存限制,只有1M以下查询结果才会被缓存,以免结果数据较大把缓存池覆盖36.binlog_cache_size(global):binlog cache是短时间内临时缓存二进制日志数据的内存区域。数据库无大事务,写入也不频繁时,大小2~4MB为合适。建议最大也不要超过32MB.可通过 binlog_cache_use、binlog_cache_disk_use 分析 size 是否足够。查看其它参数:show variables like '%binlog%';https://www.jianshu.com/p/16b085c55e9637.key_buffer_size(global): 仅用于设置MyISAM存储引擎中索引文件的内存区域大小。内存足够时,确保该区域能存放下所有MyISAM引擎表的所有索引.建议16MB以内。38.read_buffer_size读操作缓冲区大小,推荐设置16M或32M39.bulk_insert_buffer_size(thread):仅用于MyISAM,,用来缓存批量插入数据的时候临时缓存写入数据。一般8M,数据量大建议16~32MB,场景:insert ... select ...insert ... values (...), (...), (...) ...load data infile ... into ... (非空表)40.innodb_change_buffering:innodb_change_buffer_max_size:非聚集索引的插入(更新、删除、彻底删除)等操作,若不存在缓冲池上,则先存放到Insert(update、delete、Purge)buffer对象中,然后以一定频率使Insert(update、elete、Purge)buffer 和非聚集索引叶子结点合并。通常是多个写入操作合并到一个 操作中,使用叶子节点存储的数据不会过于离散、比较有顺序,减少随机读取的操作。参数值:默认是all,表示启动所有。此外还有inserts,deletes,purges,changes,none;changes表示启用inserts和deletes;none表示都不启用。innodb_change_buffer_max_size=25表示最多使用25%缓冲池空间,最大为5041.innodb_buffer_pool_size(global):设置用于缓存innodb索引及数据块的存在区域大小计算缓存命中率以调整size:(Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100%42.innodb_buffer_pool_instances:InnoDB支持多个缓冲池实例,每个页根据不同的哈希值分配到不同的缓冲池当中。好处是减少数据库内部的资源竞争,增加数据库的并发能力。这个参数似乎没法修改,根据服务器的核数设置。43.innodb_additional_mem_pool_size(global):设置用来存放数据字典信息及内部数据结构的内存空间大小当该值过小时,会记录warning信息到error log中。建议8~16MB,表特别多时32MB。44.innodb_log_buffer_size(global):存储引擎事务日志的缓冲区大小默认1MB,系统繁忙时4~8MB.在写事务日志时,先写入innodb log bufferkh ,当满足innodb_flush_log_trx_commit的条件或缓冲区写满时,才将日志写到文件(或者同步到磁盘)中。      45.innodb_flush_log_at_trx_commit:0:log buffer中的数据以每秒一次的频率写入到log file, 且同时会进行文件系统到磁盘的同步操作,每个事务的commit不会触发任何log buffer到log file的刷新或者触发文件系统到磁盘的同步操作。1: 每个事务的commit时会触发当前log buffer到log file的刷新并且触发文件系统到磁盘的同步操作。2:每个事务的commit时会触发当前log buffer到log file的刷新但不触发文件系统到磁盘的同步操作,每秒会有一次文件系统到磁盘的同步操作。46.innodb_max_dirty_pages_pct(global):在innodb buffer pool中可以不用写入数据文件中的dirty page的比例。比例值超大,从内存到磁盘的写入操作就越少。如果比例值过大,当数据库crash后重启的时间就会很长,因为有大量的事务数据需要从日志文件恢复出来写入数据文件中。同时,可能造成在达到比例设定的上限后的flush操作“过猛”而导致性能波动很大。     重启恢复的数据如果超过1GB,启动速度会比较慢,建议这个值不大于 1GB/innodb_buffer_pool_size(GB)*100,即不要超过90.47.innodb_file_per_table = OFF默认是共享表空间,共享表空间idbdata文件不断增大,影响一定的I/O性能。推荐开启独立表空间模式,每个表的索引和数据都存在自己独立的表空间中,可以实现单表在不同数据库中移动。48.LRU len 和 unzip_LRU:innodb支持压缩页的功能,将原本16k的页压缩为1k、2k、4k、8k等。由于大小的变化,对于页的管理也发生了变化。经过压缩的页由unzip_LRU管理。其中LRU len当中是包含了unzip_LRU的数量的。使用命令查看:show engine innodb status\G;49.innodb_use_native_aio: AIO(Async IO), 异常IO访问开关,异步速度快,可合并连续页访问的多个IO为一个整体的IO请求。50.innodb_flush_neighbors:刷新邻接页(Flush Neighbor Page),刷新一个脏页时,InnoDB会检测该页所在区的所有页,如果是脏页,那么一起刷新到磁盘。传统机械硬盘建议开启,固态硬盘建议关闭,即值设为0;51.slow_query_log:慢日志查询开关开启: set global slow_query_log=on;long_query_time:慢日志执行时间阈值log_queries_not_using_indexes:设置慢查询日志是否记录不使用索引的查询可用于定位数据库中较慢的查询语句。52.Cardinality该值表示索引中不重复记录数量的预估值,反映了索引对整表数据的覆盖率。cardinality/n_rows_in_table应尽可能的接近1。如果该值非常小,则没有建立该索引的必要。查询方式:show index from your_db.your_table_name;https://www.jianshu.com/p/ba6248a7abdf53.MRR(Mutil-Range Read)MRR 通过把「随机磁盘读」,转化为「顺序磁盘读」,从而提高了索引查询的性能。在查询辅助索引时,首先根据得到的查询结果,按照主键进行排序,并按照主键排序的顺序进行书签查找。#开启mrrset optimizer_switch='mrr=on';#基于成本的逻辑判断开关,开启的话mysql会判断是否需要使用mrrset optimizer_switch='mrr_cost_based=on';  54.max_connections同时处理最大连接数,推荐设置最大连接数是上限连接数的85%左右https://www.cnblogs.com/phpper/p/9570792.html55.sort_buffer_size = 2M查询排序时缓冲区大小,只对order by和group by起作用,可增大此值为16M56.open_files_limit = 1024打开文件数限制,如果show global status like 'open_files'查看的值等于或者大于open_files_limit值时,程序会无法连接数据库或卡死【性能指标】57.QPS(Queries Per Second): 每秒查询数,一台数据库每秒能够处理的查询次数QPS = Questions / UptimeQPS = Com_select(1s) + Com_insert(1s) + Com_delete(1s) + Com_update(1s)58.TPS,Transactions Per Second:每秒处理事务数TPS = (Com_commit + Com_rollback) / Uptime【分区】查询是否开启分区功能:mysql5.6: show variables like '%partition%';mysql8:select table_schema, table_name, partition_name,partition_method,partition_expression from information_schema.PARTITIONS where table_name = 'your_table_name';横向分区:按行分区,若干行分在一个区。纵向分区:也叫分表,把大字段分到一个独立表中。mysql支持横向分区,细分为几种分区类型:https://www.cnblogs.com/lonnie/p/10681512.html1)RANGE分区:行数据属于一个给定的连续列值的范围,责备加入该分区。2)LIST分区:和RANGE分区类型相比,只是LIST分区面向离散的值。如取奇遇值分到两个区。3)HASH分区:根据用户自定义的返回值来确定分区,返回值不能为负数。4)KEY分区:根据mysq提供的hash函数进行分区。子分区:是分区表中每个分区的再次分割,子分区既可以使用HASH希分区,也可以使用KEY分区。这也被称为复合分区(composite partitioning)。分区的性能数据库分为OLTP(在线事务处理应用)和OLAP(在线分析应用)。对于OLAP,可以很好的提升性能。比如有一张上亿的表,用户需要根据某些列不断的查询。如果我们以时间段对表做分区,则只需要查询该分区的表数据。对于OLTP,分区要相对小心。通常很少有需要获取超过表中10%数据的要求,而对于只需要获取几条甚至单条数据的请求,B+树的两到三次的IO能够很好的完成操作。并不需要分区方式。相反,设计不好,会带来严重的性能问题。【分表】https://www.cnblogs.com/lonnie/p/10681512.htmlhttps://www.cnblogs.com/shiliuye/p/13099256.html1.利用集群cluster,proxy,replication,drdb等等2.预先估计会出现的大数据并且访问频繁的表,将其分为若干个表.用hash,求余等方式分派数据到各表中。3.利用merge存储引擎来实现分表4.垂直分表: 把原来有很多列的表拆分成多个表,原则是:(1)把常用、不常用的字段分开放(2)把大字段独立存放在一个表中5.水平分表:(1)按时间(2)按版块(新闻、体育、娱乐。。。)(3)哈希分表(博客)【自动优化】* CheckPoint技术:https://www.jianshu.com/p/9d824138bbef* 自适应哈希索引(Adaptive Hash Index)https://www.jianshu.com/p/b8df618b90e2* ICP(Index Condition Pushdown,索引下推)本来组合索引Index(a,b,c)就应该具备Index(a,b)、Index(a,c)、Inde(b,c)的能力。但mysql5.6前并无此能力。如: select *from table1 where a=xx and b=xx以前是无法使用Index(a,b,c),有了ICP技术使得使用Index(a,b,c)的a部分的同时,也使用b(或c)进行过滤。这个过程在index filter阶段完成,而不用到table filter(回表)阶段再进行。https://www.jianshu.com/p/ba6248a7abdfhttps://www.cnblogs.com/digdeep/p/4994130.html【五种范式】* 范式比较适用于Oracle, 对于MySQL要求不并高,有时不适用。【内核优化】* 大多数MySQL都部署在linux系统上,所以操作系统的一些参数也会影响到MySQL性能,以下对linux内核进行适当优化。1.net.ipv4.tcp_fin_timeout = 30#TIME_WAIT超时时间,默认是60s2.net.ipv4.tcp_tw_reuse = 1    #1表示开启复用,允许TIME_WAIT socket重新用于新的TCP连接,0表示关闭3.net.ipv4.tcp_tw_recycle = 1  #1表示开启TIME_WAIT socket快速回收,0表示关闭4.net.ipv4.tcp_max_tw_buckets = 4096   #系统保持TIME_WAIT socket最大数量,如果超出这个数,系统将随机清除一些TIME_WAIT并打印警告信息5.net.ipv4.tcp_max_syn_backlog = 4096#进入SYN队列最大长度,加大队列长度可容纳更多的等待连接6.file fd(文件句柄数)系统默认1024。当提示“too many files open”时,修改# vi /etc/security/limits.conf  #加入以下配置,*代表所有用户,也可以指定用户,重启系统生效* soft nofile 65535* hard nofile 65535# ulimit -SHn 65535   #立刻生效7.mpstat -P ALL 1 1000查看CPU性能,1秒内对所有cpu采样1000次,统计使用状态。8.iostat -m -x 1 1000查看I/O性能,以M为单位,默认是K,每1秒采样1000次,显示扩展信息【集群】1.主从架构,双机热备(Keepalived、Heartbeat),多机负载均衡有LVA、HAProxy、Nginxhttp://lizhenliang.blog.51cto.com/7876557/13623132.主从复制管理工具,MySQL-MMM(Master-Master replication managerfor Mysql,Mysql主主复制管理器)3.MySQL Proxy,Amoeba等代理程序,实现读写分享。4.分布式缓存:memcached、redis。*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

MySQL 开发日志 -- 性能调优相关推荐

  1. mysql监控、性能调优及三范式理解

    @酷勤网-程序员的那点事 <mysql监控.性能调优及三范式理解>下文介绍了关于mysql监控.性能调优及三范式理解的内容.mysql监控.性能调优及三范式理解(来自: 博客园 ) @酷勤 ...

  2. mysql binary-mode=1_Mysql 性能调优 二 1

    Mysql 性能调优 二  1 关系型数据库中,最耗资源的sql操作: 关联表与排序 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  3. mysql buffer used_MySQL性能调优(软调优)

    基于一台普通版的MySQL服务器 目的:加快服务器的响应速度 进程数=进程*线程 1.Mysql的查询过程 1)客户端向服务器发送连接请求 2)服务器端(连接池)开辟线程响应用户请求 3)用户发起sq ...

  4. mysql linux 性能提高_针对MySQL的Linux性能调优技巧

    原文来自Percona工程师:Linux performance tuning tips for MySQL 为了方面阅读,我没依照原文按行逐句的进行翻译.另外,我自己的扩充了一下基础知识点,很多知识 ...

  5. 得数据者得天下!作为后端开发必备技能之一的MySQL,这份十多年经验总结的应用实战与性能调优我想你肯定是需要的!

    MySQL对于很多Linux从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行MySQL的优化之前必须要了解的就是MySQL的查询过程,很多的查询优化工作 ...

  6. MySQL性能调优与架构设计——第5章 备份与恢复

    第5章 备份与恢复 前言 数据库的备份与恢复一直都是 DBA 工作中最为重要的部分之一,也是基本工作之一.任何正式环境的数据库都必须有完整的备份计划和恢复测试,本章内容将主要介绍 MySQL数据库的备 ...

  7. MySQL性能调优与架构设计——第11章 常用存储引擎优化

    第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处. ...

  8. mysql性能优化与高可用_MySQL管理之道:性能调优、高可用与监控》迷你书

    MySQL管理之道:性能调优.高可用与监控>迷你书 MYSQL5.5.X主要改进 1.默认使用innodb存储引擎 2.充分利用CPU多核处理能力 3.提高刷写脏页数量和合并插入数量,改善I/O ...

  9. MySQL 性能调优和优化技巧

    介绍 MySQL 是一种流行的开源数据库应用程序,它以一种有意义且易于访问的方式存储和构造数据.对于大型应用程序,庞大的数据量可能会导致性能问题. 本指南提供了一些关于如何提高 MySQL 数据库性能 ...

最新文章

  1. 利用onSaveInstanceState()方法保存Activity状态
  2. Android--手势触控屏幕控制/GestureDetector
  3. 5G的频谱效率,到底有多高
  4. C#开发DIY照片书软件(C#图形图像开发)
  5. Openstack Linux镜像模板创建
  6. 华为U2000网管研究实录 (4) - 运行分析(系统监控客户端)
  7. 通过微软官方工具卸载office
  8. 基于嵌入式Linux的语音识别系统硬软件设计
  9. 大师级思考者是怎么探索事物本质的?
  10. 湖南人,霸占互联网的三分天下
  11. wordpress mysql缓存_WordPress 如何启用 Memcached 内存缓存来提高网站速度
  12. Python海龟绘图入门篇
  13. win10安装quicktime
  14. django批量修改table_django restframework 多对多的批量修改,基于逻辑删
  15. 蓝桥杯 历届试题 小数第n位(C语言)
  16. Win32-子窗口-父窗口-窗口所有者
  17. JavaWeb核心技术——Web概述
  18. springboot集成ShardingSphere-JDBC(5.0.0-beta)
  19. 中国第一大手机操作系统已有过亿用户,不是华为鸿蒙
  20. 如何通过知识星球粉丝变现年入100万?

热门文章

  1. 成功解决ValueError: cannot convert float NaN to integer
  2. 成功解决AttributeError: module 'numpy' has no attribute 'equal'
  3. Py之qrcode:Python包之qrcode的简介、安装、使用方法之详细攻略
  4. TF之LSTM:利用基于顺序的LSTM回归算法对DIY数据集sin曲线(蓝虚)预测cos(红实)(matplotlib动态演示)
  5. pandas:dataframe删除某些不为non的行
  6. 素数计算之埃氏筛法、欧拉筛法
  7. 解决java web前后台乱码
  8. iOS 关于权限设置的问题
  9. [hdu3549]Flow Problem(最大流模板题)
  10. JavaScript 表单编程