[精选]Mysql优化查询过程中的数据访问
1.TCP/IP协议中ARP及RARP协议的作用?
ARP协议的作用是由IP地址查找对应的MAC地址
RARP协议的作用正好相反,是由MAC地址查找对应的IP地址。
2. 重放攻击,Smurf攻击,字典攻击,中间人攻击
重放攻击指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。重放攻击可以由发起者,也可以由拦截并重发该数据的地方进行。
Smurf攻击是一种分布式拒绝服务 (DDoS) 攻击,结合使用IP欺骗和ICMP回复方法使大量网络传输充斥目标系统,引起目标系统拒绝为正常系统进行服务。Smurf攻击通过使用将回复地址设置成网络的广播地址的ICMP应答请求数据包,来淹没受害主机,最终导致该网络的所有主机都对此ICMP应答请求做出回复,导致网络阻塞。更复杂的将源地址改为第三方的受害者,最终导致第三方崩溃。
字典攻击是在破解密码或密钥时,逐一尝试用户自定义词典中的可能密码的攻击方式。与暴力破解的区别是,暴力破解会逐一尝试所有可能的组合密码,而字典攻击会使用一个预先定义好的单词列表。
中间人攻击是一种间接的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机称为“中间人”。通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方毫不知情。
3.EXT3,EXT4,XFS文件系统大小?
Linux | 文件系统大小 | 单个文件大小 |
---|---|---|
ext3 | 16TB | 2TB |
ext4 | 1EB | 16TB |
xfs | 18EB | 9EB |
4.Linux 系统文件描述符:
0:STDIN 标准输入
1:STDOUT 标准输出
2:STDERR 标准错误输出
5.Mysql日志
有多少种日志 :redo/undo
日志的存放形式
redo:在页修改的时候,先写到redo log buffer 里面,然后写到redo log 的文件系统缓存里面(fwrite),然后再同步到磁盘文件(fsync)。
Undo:在MySQL5.5之前,undo只能存放在ibdata*文件里面,5.6之后,可以通过设置innodb\_undo\_tablespaces参数把undo log存放在ibdata*之外。
事务是如何通过日志来实现的:
因为事务在修改页时,要先记undo,在记undo之前要记undo的redo,然后修改数据页,再记数据页修改的redo。Redo(里面包括undo的修改)一定要比数据页先持久化到磁盘。当事务需要回滚时,因为有undo,可以把数据页回滚到前镜像的状态,崩溃恢复时,如果redo log中事务没有对应的commit记录,那么需要用undo把该事务的修改回滚到事务开始之前。如果有commit记录,就用redo前滚到该事务完成时并提交掉。
必须了解的MySQL三大日志:binlog、redo log和undo log
MySQL日志15连问
MySQL基于日志还原数据
6. Mysql json类型
5.7.8开始,mysql开始支持json数据类型,json数据类型存储时会做格式检验,不满足json格式会报错,json数据类型默认值不允许为空。
优势:
存储上类似text,可以存非常大的数据。
JSON有效性检查:插入的数据必须是JSON类型的字符串才行。
相比于传统形式,不需要遍历所有字符串才能找到数据。
支持索引:通过虚拟列的功能可以对JSON中部分的数据进行索引
7. Mysql索引创建原则
最适合索引的列是出现在 where 子句或连接子句中的列,而不是出现在 select 的关键字后的列
索引列的基数越大,索引效果越好
对字符串进行索引,应指定一个前缀长度,可以节省大量的索引空间
根据情况创建复合索引,复合索引可以提高查询效率
避免创建过多索引,索引会额外占用磁盘空间,减低写操作效率
主键尽可能选择较短的数据类型,可以有效减少索引的磁盘占用,提高效率
8. 索引的注意事项
复合索引遵循左前缀原则
like 查询,%不能在前,可以使用全文索引
column is null 可以使用索引
如果 MySQL 估计使用索引比全表扫描更慢,会放弃使用索引
9.查询速度慢的原因
打开慢查询日志,通过 pt-query-dugest 分析
#看一下当前mysql数据库是否开启了慢查询
show variables like 'slow_query%';
#临时开启
set global slow_query_log='ON';
#永久开启:修改配置文件my.cnf,在[mysqld]下的下方加入,重启mysql服务
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/lib/mysql/tmp_slow.log //linux
long_query_time = 1
show profile,通过 set profiling=1;开启,服务器上执行的所有语句消耗时间都会记录到临时表。show profile for query QUERY_ID 查询指定查询
show status,查询一些计数器,猜出哪些代价高或消耗时间多
show processlist,查询线程状态进行分析
explain,分析单个 SQL 语句查询
10.Mysql优化查询过程中的数据访问
访问数据太多导致性能下降
确定应用程序是否检索大量超过需要的数据,可能是太多列或者行
确定 mysql 是否分析大量不必要的数据行
查询不需要的记录,使用 limit 限制
夺标关联返回全部列指定 A.id,A.name
总数取出全部列,select * 会让优化器无法完成所有覆盖扫码的优化
重复查询相同的数据,可以缓存数据
改变数据库和表的结构,修改数据表范式
重写 SQL 语句,让优化器可以更优的执行
11.优化长难的查询语句
MySQL 内部每秒能扫描内存中上百万行数据,相比之下,响应数据给客户端就要慢得多
将一个大的查询分解为多个小的查询
分解关联查询,将一个关联查询分解为多个 sql 来执行,让缓存效率更高,执行单个查询可以减少锁的竞争,在应用层做关联可以更容易对数据库进行拆分,查询效率会有大幅提升,较少冗余记录的查询
12 .优化特定类型的查询语句
优化 count()查询,count(*)会忽略所有列,直接统计所有列数,因此不要用 count(列名)
优化关联查询,确定 ON 或者 USING 子句的列上有索引;确保 GROUP BY 和 ORDER BY 中只有一个表的列,这样 MySQL 才有可能使用索引
优化子查询,可使用关联查询替代
优化 GROUP BY 和 DISTINCT,建立索引进行优化
优化 LIMIT 分页,可以通过记录上次查询的最大 ID,如果根据 id 排序时,下次查询根据该 ID 来查 询(如:ID > maxID)
优化 UNION 查询,UNION ALL 性能比 UNION 高
13.高并发常见单位
QPS:每秒钟请求或查询数量,在互联网领域指每秒响应的请求数(指 HTTP 请求)
吞吐量:单位时间内处理的请求数量(通常由 QPS 和并发数决定)
响应时间:从请求发出到收到响应花费时间
PV:综合浏览量(Page View),即页面浏览量或者点击量,一个访客在 24 小时内访问的页面数量。同一个人浏览你的网站同一个页面,只记作一次 PV
UV:独立访客(UniQue Visitor),即一定时间范围内相同访客多次访问网站,只能计算为 1 个独立访客
带宽:计算带宽大小需关注两个指标,峰值流量和页面的平均大小
日网站带宽=PV/统计时间(秒)平均页面大小(KB)8
峰值一般是平均值的倍数
QPS 不等于并发并发连接数。QPS 是每秒 HTTP 请求数量,并发连接数是系统同时处理的请求数量
二八定律(80%的访问量集中在 20%的时间):(总 PV 数 80%)/(6 小时秒速 20%)=峰值每秒请求数(QPS)
压力测试:能承受最大的并发数和最大承受的 QPS 值
14.常用性能测试工具 ab
# 模拟并发请求 100 次,总请求 5000 次
ab -c 100 -n 5000 http://example.com
15.http 状态码
200 请求成功2. 204 not content
206 reset content
301 永久重定向
302 临时重定向
307 临时重定向
400 错误请求
401 缺少认证信息
403 拒绝
404 不存在
500 服务器异常
502 Bad Gateway
503 服务器超负载或停机维护
16.OSI 七层协议
物数网传会表应
物理层:建立、维护、断开物理连接
数据链路层:建立逻辑连接,进行硬件地址寻址,差错校验等功能
网络层:进行逻辑地址寻址,不同网络之间的路径选择
传输层:定义传输数据的协议端口号,一级流控和差错校验。协议有 TCP/UDP,数据包一旦离开网卡即进入网络传输层
会话层:建立、管理、终止会话
表示层:数据的表示、安全、压缩
应用层:网络服务与用户的 接口,默认协议有 :http(80),ftp(21),tftp,smtp(25),snmp,dns(53),telnet(23),https(443),pop3(110),dhcp
【面试】50道经典计算机网络面试题
面试中常见的计算机网络的问题
17. HTTP 协议常见请求头/响应头
Content-Type 指定数据内容类型
Accept 指定客户端能接受数据内容类型
Origin 最初请求来源(POST)
Cookie
Cache-Control 指定请求的缓存机制
User-Agent 用户浏览器信息
Referrer 上级请求路径
X-Forwarded-For 请求端真实 ip
Access-Control-Allow-Origin 允许其他请求域名,用于跨域
Last-Modified 最后响应时间
18.算法,逻辑结构,存储结构的关系
一个算法的设计取决于所选定的逻辑结构,而算法的实现依赖于所采用的存储结构。
顺序存储结构:用数据元素在存储器中的相对位置来表示数据元素之间的逻辑结构(关系)。
链式存储结构:在每一个数据元素中增加一个存放另一个元素地址的指针(pointer ),用该指针来表示数据元素之间的逻辑结构(关系)
19.PHP伪类型
伪类型:假类型,实际上在PHP中不存在的类型。但是通过伪类型可以帮助程序员去更好的查看操作手册从而更方便学习。
mixed混合类型:多种PHP中的数据类型
number数字类型:任意数值类型(整形和浮点型)
callback回调类型:回调函数作为参数
20.PHP-FPM的运行方式及优缺点?
static :表示在 php-fpm 运行时直接 fork 出 pm.max_chindren 个子进程,
dynamic:表示,运行时 fork 出 start_servers 个进程,随着负载的情况,动态的调整,最多不超过 max_children 个进程。
一般推荐用 static ,优点是不用动态的判断负载情况,提升性能;缺点是多占用些系统内存资源。
N 是 CPU 内核数量,M 是 PHP 能利用的内存数量,m 是每个 PHP 进程平均使用的内存数量
dynamic 方式的公式:在 N + 20% 和 M / m 之间
static方式的公式:M / (m 1.2)
pm.max_requests:指的是每个子进程在处理了多少个请求数量之后就重启。这个参数,理论上可以随便设置,但是为了预防内存泄漏的风险,还是设置一个合理的数比较好。
21.PHP常用信息函数
phpinfo — 输出关于 PHP 配置的信息
phpversion — 获取当前的PHP版本
php_sapi_name — 返回 web 服务器和 PHP 之间的接口类型
ini_get — 获取一个配置选项的值
ini_get_all — 获取所有配置选项
ini_restore — 恢复配置选项的值
ini_set — 为一个配置选项设置值
22.PHP的socket
Socket 是在应用层和传输层之间的一个抽象层,它把 TCP/IP 层复杂的操作抽象为几个简单的接口,供应用层调用实现进程在网络中的通信。
客户端过程:创建 Socket,连接服务器,将 Socket 与远程主机连接(注意:只有 TCP 才有“连接”的概念,一些 Socket 比如 UDP、ICMP 和 ARP 没有“连接”的概念),发送数据,读取响应数据,直到数据交换完毕,关闭连接,结束 TCP 对话。
服务端过程:先初始化 Socket,建立流式套接字,与本机地址及端口进行绑定,然后通知 TCP,准备好接收连接,调用 accept() 阻塞,等待来自客户端的连接。如果这时客户端与服务器建立了连接,客户端发送数据请求,服务器接收请求并处理请求,然后把响应数据发送给客户端,客户端读取数据,直到数据交换完毕。最后关闭连接,交互结束。详述WebSocket原理
视频 | 一步步教你操作websocket通知案例
23.PHP数组结构及排序原理
PHP数组是由哈希表 + 双向链表实现
排序原理:
申请n个额外空间
遍历双链表 调用排序函数zend\_qsort(内部是快速排序算法)对数组排序
调用排序函数zend\_qsort(内部是快速排序算法)对数组排序
排序后,双链表中节点的位置发生变化,因而调整指定指向
遍历数组,分别设置每一个节点的pListLast和pListNext
设置HashTable的pListTail
作者:码农编程进阶笔记
欢迎关注微信公众号 :码农编程进阶笔记