【总结】日常遇到的一些问题相关知识

RAID卡:  

bbu  force wb

内核:

1. io调度  deadline   noop

2. vm 管理 vm.swappiness = 0

文件系统  mount  nobarrier data=ordered writeback

1. 加大队列  nr_requests

2. 关闭numa

CPU:

innodb_read_io_threads =  cpu核心数/2

innodb_write_io_threads = cpu核心数/2

read + write  = cpu核心数

可以根据读写比例调整上述值

磁盘:

innodb_io_capacity = 硬盘的iops

脏页刷新:

当超过innodb_max_dirty_pages_pct的设定值 , 会将innodb_buffer_pool刷新到磁盘

重做日志ib_logfile写满后

机器空闲的时候

当写操作很频繁的时候,重做日志ib_logfile切换次数就会很频繁,只要有一个写满了,就会将脏页大量的刷入磁盘,这会对系统系统有整体的影响。为了避免过大的磁盘io , innodb_adaptive_flushing会自适应刷新。参数默认开启。

innodb_buffer_pool:

1. innodb_buffer_poll有2个区域,sublist of new blocks(热数据) sublist of old blocks(不经常访问的数据)

用户访问数据,如果缓冲区中有相应的数据,则返回,如果没有,从磁盘空间读入sublist of old blocks区域,然后再移动到2. sublist of new blocks 区域,然后在根据LRU算法将最近最少使用的数据移除旧数据页

3. 但是这其中也有一些问题,假如有些语句做统计用全表扫描,或者做一次mysqldump,这时就会进入sublist of new blocks区域,把一些真正的热数据提走,这样会造成缓冲区的进进出出,导致磁盘io繁忙

4. innodb_old_block_pec参数可以控制进入缓冲区sublist of old blocks的数量,默认37,占整个缓冲区的3/8。当全表扫描一个大表或者做mysqldump可以将innodb_old_block_pec设置的小些使数据块少量的进入缓冲区,从而让更多的热数据不被踢出。

Old database pages 23600  在旧区域存放多少页

pages made young 411111, not young 2987612 移动到新区域多少页  /   没有移动的有多少页

1274 youngs/s  16521 non-youngs/s   

如果你没有全表扫描,发现youngs/s值很小,那么就该增大innodb_old_blocks_pec或者减少innodb_old_blocks_time 。如果进行了全表扫描,发现non-youngs/s的值很小,那么就应该增大innodb_old_blocks_time

innodb数据恢复时间:

依赖于 buffer poll ,脏页面比例,tps等因素

innodb_buffer_pool_instances = 10  innodb_buffer_poll实例的个数

最多支持64 。 innodb_buffer_pool_size  必须大于1G

innodb_buffer_pool_dump_at_shutdown = 1

关闭mysql时,把热数据dump到本地硬盘

innodb_buffer_pool_dump_now = 1

采用手工方式把数据dump到磁盘

innodb_buffer_pool_load_at_startup = 1

在启动时把热数据load到内存

innodb_buffer_pool_load_now = 1

采用手工方式把热数据load到内存

慢日志:

当数据库连接数很高时,此时需要注意,可以通过cacti监控软件观察时间点,然后把这一段时间点的慢日志截取出来

sed -n '/#Time:110720 16:17:20/,/end/p' mysql.slow > slow.log

然后用mysqldumpslow 命令取出最耗时的最长的10条慢sql进行分析

mysqldumpslow -s t -t 10 slow.log

主从同步 :

slave_exec_mode参数可自动处理同步复制错误

set global slave_exec_mode='IDEMPOTENT'

默认值是 STRICT 严格模式

设置完毕后,当出现1023(记录没有找到) , 1026(主键复制)时,会自动跳过错误,并且记录到错误日志中。

如果从库某几张表的数据和主库不一致,解决方法:

1. 停止slave

2. 在主库上导出这几张表,并记录下同步的binlog时间点和pos点

mysqldump -uroot -pxxx -q --single-transation --master-data=2 yourdb table1 table2 > xxxx.sql

3. 导入sql文件到从库。找出备份的sql文件中的binlog和pos点

4. change master

直到sql_thread线程为NO,这期间同步报错可以一律跳过

stop slave ; set global sql_slave_skip_counter=1 ; start slave;

如何干净的清除slave的同步信息

stop slave ; reset slave 不行。 要使用 reset slave all;

主从切换:

事件调度器在主从切换出现的问题:

set global event_scheduler = 1;

在主从架构中 event只能在主上触发,在slave上不能被触发,如果再slave上触发了,同步就会坏掉。

show event 

status :slaveside_disabled

需要执行 alter event 'insert' enable

人工误删除innodb ibdata 数据文件,如何恢复:

先找到mysqld进程的pid   netstat -nlp | grep mysqld   这里是30246

执行 ll /proc/30426/fd | grep 'ib_|ibdata'

关闭前端业务 ,执行 flush tables with read lock

set global innodb_max_dirty_pages_pct=0; 让脏页尽快刷新到磁盘 

show engine innodb status\G;查看innodb状态信息,确保脏页已经刷新到磁盘 。

复制文件到mysql的数据目录 。重启mysql

where 从句中的in 子查询 :

select * from tables1 where filed in (select filed from table2 where cacheld='xxxx')

工作原理:mysql先要为内层的查询语句查询结果建立一个临时表,然后外层查询语句才能在临时表中查询记录,查询完成后,还需要撤销这些临时表。

sql优化案例分析 :

1. not in 子查询优化

在生产环境中 ,尽量避免子查询,可以用表连接取代。 (select update delete )

2. 模糊匹配 like '%xxx%'优化

不要使用select *  , select * 无法覆盖索引。

select 字段必须存在索引。

3. limit 分页优化

select xx,xx,xx from logdb order by id limit 9999,10;

select xx,xx,xx from logdb where id >=10000 order by id limit 10 

4. count(*) 统计如何加快速度

count(*)如果数据量大一般都是比较慢的

select count(*) from L_user;

走聚集索引,innodb聚集索引就是数据,需要全表扫描统计。

select count(*) from L_user where Sid >=0;

如果加条件,走where后的Sid辅助索引,辅助索引不存放数据,而是由一个指针指向对应的数据块。统计时消耗的资源少,速度也更快。

虽然上述方法加快了速度,类似统计的sql语句 select count(*) select sum() 。这不建议在主库执行,会导致锁表。不走索引,表锁。

5. or 条件优化

select * from USER where name='bob' or age='30';

这条语句是不会走索引的。全表扫描。

select * from USER where name='bob' union all select * from USER where age='30'

##############################################################################

6. 不必要的排序

select count(1) as rs_count from 

(

select a.id,a.title,a.content,b.log_time,b.name

from a b

where a.content like 'rc_%' and a.id=b.id

order by a.title desc

)

as rs_table;

select count(1) as rs_count from

(

select a.id from a join b

on a.id = b.id and a.content like 'rc_%'

)

as rs_table

7. 不必要的嵌套 select 子查询

select count(1) as rs_count from 

(

select a.id,a.title,a.content,b.log_time,b.name

from a b

where a.content like 'rc_%' and a.id=b.id

order by a.title desc

)

as rs_table;

select a.id,a.title,a.content,b.log_time,b.name

from a join b

on a.id = b.id and a.content like 'rc_%'

order by a.title

#########################################################################################################

10.用where代替having

这个简单,就不举例子了

时间: 2024-12-23 02:13:48

【总结】日常遇到的一些问题相关知识的相关文章

关于数值分析的实验程序,用c语言c++均可,需要用到数值分析课相关知识,我可以提供部分资料

问题描述 关于数值分析的实验程序,用c语言c++均可,需要用到数值分析课相关知识,我可以提供部分资料 解决方案 我只想说 数据分析 不应该用MATLAB更方便吗? 解决方案二: http://wenku.baidu.com/link?url=ZAScYogajXHrTTRa5xjpUPtS7OQQXZ_LfXaWNkczTtWf2MJgx0RZFUuca4iRGUcPwtr4Um4AJObpWKl8dg5WS6fZdx6lfoES8JYcsJtcdgi 解决方案三: 数值分析各种算法C语言数值分

求射频、IC相关知识解析

问题描述 求射频.IC相关知识解析 什么是射频? 射频的频率范围是什么? 射频与无线,wlan,WiFi,蓝牙关系是什么? 移动通信用的都是射频么?手机的GSM,CDMA等也是用的射频技术么? IC/ID 卡用的射频技术么?卡中的线圈是什么作用?有源IC卡有线圈么,它是怎样应用射频技术达到的? 另外射频技术除射频识别外还有哪些方面的应用? 解决方案 这个问题建议你将问题一个一个的去 Google 等查找一下,都会有答案的.

讲解Python中面向对象编程的相关知识

  这篇文章主要介绍了深入讲解Python中面向对象编程的相关知识,是Python入门学习中的基础知识,需要的朋友可以参考下 Python从第一天开始就是面向对象的语言.正因为如此,创建和使用类和对象是非常地容易.本章将帮助您在使用Python面向对象编程的技术方面所有提高. 如果没有任何以往面向对象(OO)的编程的经验,那么可能要了解一些基本的入门课程就可以了,或者至少某种形式的教程,让你有了解基本概念. 但是,这里会比较少地介绍面向对象编程(OOP): OOP术语概述 类: 用户定义的原型对

repaint和reflow的相关知识

文章简介:页面重构应注意的repaint和reflow. 最近了解了下repaint和reflow的相关知识,觉得在页面重构过程中就应该考虑前端开发(js)人员对dom进行操作,能够减轻客户浏览器的鸭梨.在这里整理了一下相关资料,推荐看帖子底部的文章,如果觉得排版不够好请移步我的博客围观.这是一个讨论帖,抛砖引玉,大家说说自己工作中的经验~ 1. 什么是 repaint 和 reflow? 一个页面由两部分组成:DOM:描述该页面的结构render:描述 DOM 节点 (nodes) 在页面上如

小技巧:打印样式的相关知识

打印|技巧 今天有个朋友问我关于打印样式的问题,当时正是工作时间一时不好回答,只好在工作完成后整理,总结一下打印样式的相关知识. 先来了解一下什么叫打印样式?打印样式也就是说通过CSS指定给打印机来识别的打印时的输出样式.在HTML中链接的打印样式是:<link rel="stylesheet" rev="stylesheet" type="text/css" media="print" href="css/p

非窗口类中使用定时器的方法及相关知识的介绍

本文代码运行效果图如下: 摘 要:本文主要通过一些简单的例子,介绍了如何在Visual C++的窗口和非窗口类中使用定时器.重点介绍了如何用静态成员函数和静态数据成员在非窗口类中使用定时器,同时,又介绍了与定时器相关的知识,例如回调函数,C++类中的静态成员,以及模板类中的映射类等. 关键字 C++ 类 定时器 静态函数 静态成员函数 静态数据成员 回调函数 映射类 摘 要:This page introduce how to use timer in window class and none

计算机网络与路由器故障诊断的相关知识

路由器故障诊断是一门综合性技术,涉及网络技术的各个面.下面,我们就来简单回顾一下网络和路由器的基本概念. 一.计算机网络 计算机网络的发展,导致网络之间各种形式的连接.计算机网络按其计算机分布范围通常被分为局域网和广域网.广域网覆盖地理范围较大,如校园.城市之间.乃至全球;局域网覆盖地理范围较小,一般在数米到数十公里之间. 计算机网络是由计算机集合加通信设施组成的系统,即利用各种通信手段,把地理上分散的计算机连在一起,达到相互通信而且共享软件.硬件和数据等资源的系统. 二.因特网 采用统一协议实

Go语言中的Interface相关知识

一件作品的诞生,通常是一个设计师独立完成的.因为这样,一件建筑也好,画作或者音乐舞蹈也好,才能真实反映出 其个性.而正是这种不同于其他同类的独特一面,正是这种发自创造者的灵光一现.但又不会背离创作目的和原始架构的新 颖实用之处,才使得创新尤为难得. Go语言的诞生,是三个有很强个性的设计师共同完成的.Go语言的定位,就象 三维坐标系中的一个点,在强类型.动态和并发这三个特性维度上,分别代表了Ken.Robert和Rob三人的创造思维的投影. 当然,这样描述不仅是为了表达Go语言有这三个特性,也是

泛型相关知识

自从上次参加完俱乐部的聚会后,觉的有必要总结下泛型的用法,虽然脑袋讲的 非常仔细,没有必要再写,但做为学习者,我喜欢把自己的所学以文章的形式展示出 来,这样也有我的一部分.我们可以用一个简单的例子来做实验:实例化一个 ArrayList和一个List<int>,然后往其中加入成员,最后分别读取出第一个 成员,进行一个加法操作. ArrayList _list = new ArrayList(); _list.Add(1); _list.Add("a"); int i = (