MySQL常用的SQL调优手段或工具有哪些

目录

MySQL binlog_format=mixed,可行吗,为什么

MySQL误删除frm文件该怎么办?

你遇到过PHP连接MySQL的性能问题吗,如何解决的?

MySQL常用的SQL调优手段或工具有哪些

在一个2c4g的服务器上如何用python操作8GB的超大文件

MySQL反应慢的排查思路


一、MySQL binlog_format=mixed,可行吗,为什么

不可行,因为会导致主从数据不一致

Mixed格式相当于 Row 和 Statement 模式的融合。遇到表结构变更的时候就会以statement模式来记录。像update或者delete等修改数据的语句,还是会记录所有行的变更。

但某些情况就会产生主从数据不一致例如:

1、当带有自增主键的更新多个列的表,并调用触发器或存储函数时

2、当SQL使用LOAD_FILE()功能时。(Bug#39701)

3、当SQL语句引用一个或多个系统变量时。(Bug#331168)

更多请参考:https://dev.mysql.com/doc/ref...

二、MySQL误删除frm文件该怎么办?

情况一:误删后还未重启MySQL

1、从proc中恢复.frm文件

cp /proc/pidof mysqld/fd/误删除的.frm /datadir/db/对应库的目录/


情况二:误删后也重启MySQL了

2、从备份中获取表结构

物理备份。从物理备份中直接把.frm文件拷贝回来。

逻辑备份。找到该表的DDL,在备用实例创建该表,再把.frm文件拷贝回来。


注意事项:

1、无论是情况一还是情况二,都需要重新设置属主和属组。

2、若恢复期间对该表执行了新的DDL,则上述方法可能都无效。

3、本案例在MySQL 5.7.18版本(开启表独立空间模式)下亲测通过。

三、你遇到过PHP连接MySQL的性能问题吗,如何解决的?

PHP连接MySQL用得比较多的有原生mysql扩展、mysqli和pdo_mysql等,其与MySQL的连接可以分为三类

1、短连接,每次都需要建立新连接,数据库开销较大。尤其是高并发环境下,有可能会把数据库连接数直接打满并造成CPU很高。

2、长连接,但无法像连接池那样做到连接复用,控制不好的话,更容易导致数据库连接数爆表。

3、利用第三方应用提供的连接池功能,如swoole、ProxySQL等,基本上就可以解决连接性能瓶颈了。尤其像ProxySQL这样的还能顺便解决读写分离、高可用切换等问题。

另建议设置net.ipv4.tcp_tw_reuse=1打开tcp重用,提高tcp连接性能。

四、MySQL常用的SQL调优手段或工具有哪些

1、根据执行计划优化

通常使用desc或explain,另外可以添加format=json来输出更详细的json格式的执行计划,主要注意点如下:

type:显示关联类型。重点关注ALL(全表扫描)、index(全索引扫描);

key_len:使用到索引的长度。通常该值大于30就要注意被选中的索引是否字符串类型,可否进一步优化;

rows:预估扫描的行数。通常该值大于1万就要注意可否选择更合适的索引减少扫描的行数;

extra:显示额外信息。重点关注Using temporary,Using filesort,尽量通过添加或调整来消除。

2、利用profiling优化

通过探针的方式详细记录sql执行过程详细代价,可以很清楚地了解到sql到底慢在哪个环节。

重点关注下列几种情况是否耗时较大:

sending data

creating sort index

sorting result

query end

Waiting ... lock

Creating tmp table

Copying to tmp table

3、利用optimizer_trace优化

可以输出优化器评估SQL执行计划的详细过程,尤其是每个可能的索引选择的代价。

利用它可以明白优化器为什么选中索引A,而不选中索引B。

4、利用session status优化

通过flush status重置session级别的状态值后,执行sql查看相应的状态变化量。

可重点关注几个信息:

Created_tmp_tables,创建内存临时表    

Created_tmp_disk_tables,创建磁盘临时表,尤其注意    

Handler_read_rnd,随机读   

Handler_read_rnd_next,全表扫描或者排序或者读下一行    

Select_scan,全表扫描    

Select_full_join,全表join

Sort_merge_passes,多次归并排序

5、其他优化工具

MySQL workbench、pt-query-digest等

五、在一个2c4g的服务器上如何用python操作8GB的超大文件

1、使用with open的方式,for line in f文件对象f视为一个迭代器,会自动的采用缓冲IO和内存管理,并且能够自动关闭文件,推荐该方式

举例:

with open('filename')asf:forlineinf:do_things(line)

2、open file的方式,可以通过read(size)指定每次读取的大小,将大文件切割成小文件来读取,每次处理完小块即释放内存

举例:

f =open(filePath)whileTrue: content = f.read(chunk_size) do_things(content)

3、linecache模块,可以指定读取文件某一行

举例:

content= linecache.getline('filename', linenum)do_things(content)

六、MySQL反应慢的排查思路

(一)导致MySQL慢可能的因素有

1、计算资源不足

2、系统层面未进行基本的优化,或不同进程间资源抢占

3、MySQL配置不科学(附神器:http://imysql.com/my-cnf-wiza...

4、垃圾SQL满天飞

(二)查看系统层面负载手段

1、top查看整体负载情况,快速确认哪个进程系负载高

2、free查看内存情况,是否有内存泄露和用了swap等风险

3、vmstat/sar查看当前系统瓶颈到底在哪,如CPU、IO、网络等

4、终极神器perf top查看cpu消耗在哪些系统调用函数

(三)查看MySQL的整体情况

1、观察show processlist输出中是否有临时表、排序、大量逻辑读、锁等待等状态

2、观察show engine innodb status输出中是否有大事务、长事务、锁等待等状态

(四)干掉垃圾SQL,常用手段

1、用explain、desc观察执行计划

2、用profiling定位sql执行的瓶颈

3、用pt-query-digest分析慢sql

(五)几个窍门

1、mysqld进程消耗CPU长时间超过90%的话,99.9%是因为没用好索引

2、cpu的%sys高的话,大概率是swap或中断不均衡导致,也可能是有多个索引且超高并发写入(更新),或者有很严重的锁等待事件

3、最⼤的瓶颈通常是在磁盘I/O上,因此尽量用高速磁盘设备

4、如果物理磁盘无法再升级,则通过增加内存提升性能容量

5、遇到无法诊断的问题时,试试⽤perf top来观测跟踪

6、SQL执行慢,有时未必是效率低,也可能是因为锁等待,甚⾄是磁盘满了

详情戳:精彩回顾┃《MySQL为什么慢》视频上线

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335