1.redolog如果满了会如何处理
关于redolog可以参考下
https://blog.csdn.net/tiancaideshaonian/article/details/119719734
当redolog满了之后:
1、满了之后,会暂停新事物的提交,并引发报错
2、当留出空间后,才能继续执行通常redolog的大小是4G、高版本后,可以支持到更大。
redolog逻辑上是一块环形的空间,通过checkpoint 和 writepos 记录擦除位置以及当前写入位置。
2.一般环境分层
开发环境
test测试环境
uat(User Acceptance Test) 测试环境
预发环境(准发布环境)
灰度环境
生产环境
3.可以使用多少列创建索引
mysql5.7 官方文档:
https://dev.mysql.com/doc/refman/5.7/en/innodb-limits.html
3.1 InnoDB可以单表最多有多少列?
可以看出在InnoDB中最多允许1017列。我们注意到后面Virtual generated columns are included in this limit. 虚拟列也是在这个限制中的。
什么是虚拟列:
针对函数索引,Mysql5.7提出 虚拟列用于实现函数索引类似的功能
虚拟列不存储在数据行中,但虚拟列的元数据信息会存在于相关系统表中,对虚拟列的添加或者删除只会涉及这些系统表,不会导致数据表的重建,所以效率很高。注意不能建立虚拟列和真实列的联合索引
参考连接:https://www.techug.com/post/mysql-5-7-generated-virtual-columns.html
3.2 索引建多了,会有什么问题
1、索引从底层讲也是需要占用物理空间的。索引多了,自然占用空间就多。
2、索引内部有序,插入数据时,如果需要调整顺序,此时就会导致索引树自身的调整。此调整过程也会消耗性能。
3.3 多列索引最多允许多少列
一般规定不允许超过5列
3.4 mysql行数据大小限制
最大允许为65535
3.4.1 65535 对于text 和 blob字段是不受其影响的
blob字段和 text字段只会在行字段大小中贡献9到12个字节,他们的数据时存在其他地方,通过指针寻址。
text 和 blob不能作为索引字段。
TEXT与BLOB的主要差别:BLOB保存二进制数据,TEXT保存字符数据。
拓展:全文索引
5.6之前 只有MyISAM存储引擎支持,5.6之后innodb支持
create fulltext index index_name on tablename(colname)
select * from user where match(name) against(‘ABLE’);
show variables like ‘%ft%’
- 必须在字符串、文本字段上建立
- 只有3-84个字符才会建立全文索引
- 默认为等值,例如a 匹配 aa,如果想要匹配可以在布尔模式下搜索a*
- 全文索引字段值要进行且此处理,按syntax字符进行切割
4.热点数据
4.1 限制Redis最大占用内存,通过allkeys-lru算法进行淘汰
less recently used (LRU) keys
拓展:关于LRU算法在Mysql中其实也有使用
在bufferPool 中使用了改进的LRU算法用于page的内存释放
改进型LRU算法
- 普通LRU:末尾淘汰发,新数据从链表头部加入,释放空间从末尾淘汰
- 改进LRU: 链表分为new 和 old两个部分,加入元素时,从midpoint位置插入,如果数据很快被访问了,那么page就会向new 列表头部移动,如果没有被访问,会逐步向old尾部移动,等待淘汰
- 每当有新的page数据读取到buffer pool时,Innodb会判断是否有空闲页,是否足够,如果有就将free page 从free list李彪删除,放入到LRU列表中,没有空闲页,就会根据LRU算法淘汰你人的页,并将被内存空间释放分配给新的页
4.2 对于单条记录命中缓存后添加过期时间
这个有最大的弱点就是,如果某一时间端命中过高后,会导致过期时间过大而无法显示真实情况
其实这里可以考虑借助缓存创建时间,最近命中次数等进行权重分析,进而影响过期时间。类似于热搜的算法。
5. 分布式锁
redis:
1、自己定义,使用redis的setNx()加锁,解锁使用lua脚本;
2、使用现成集成框架,redissonZK:
通过临时节点
优缺点:
redis 比较常用,效率高,并且已经实现了锁的可重入。实现比较简单
zk的话 可能需要自己去实现,同时考虑锁的可重入
6. 如何设计实现 TPS 和 QPS
1.redis记录服务调用
2.拉取服务日志,进行数据分析
3.Niginx请求日志统计
4.redis HyperLogLog
6.1 redis HyperLogLog
HyperLogLog 提供不精确的去重计数方案,虽然不精确但是也不是非常不精确,标准误差是 0.81%
参考连接:https://www.cnblogs.com/54chensongxia/p/13803465.html