问题:redolog满了,会如何处理?
1、满了之后,会暂停新事物的提交,并引发报错
2、当留出空间后,才能继续执行
补充:
- 通常redo log 的大小是4GB以上
- redo 是有大小限制的,不是磁盘的容量,环形结构的一块空间
- redo log 在高版本后,可支持到更大,可通过修改参数,进行设定,几百G的空间也可以的。
- redo log 不会自动分割binlog 会分割
项目进行过程的测试环境:
1、dev 开发环境:
开发、联调、单测、测试接口
2、test 测试环境:
提测、验证、联调、测试接口
3、uat uat环境:
业务验证、测试接口
4、stage 预发环境:
预上线、压测、联调、环境隔离、测试接口
5、prod 生产环境:
上线、AB灰度验证、测试接口、网络验证
可以使用多少列创建索引?
nnoDB: 最多创建1017列, 最多64个二级索引, 单个索引最多包含16列, 索引最大长度767字节(其实行格式为REDUNDANT,COMPACT最高为767字节,但行格式为DYNAMIC,COMPRESSED最高可达为3072字节), 行大小最大65536字节
1023 - 3*2 = 1017
涉及两个知识点:事务隔离级别、事务的提交顺序
大致是通过这些预留字段作为虚拟列,建虚拟表,通过指针的顺序控制事务顺序,通过空间进行行记录
根据事务隔离不同,不一定这些字段全部都用到,看情况会发生改变。理解起来也比较复杂,
索引数据存储在磁盘,对数据的增删改需要维护索引数据,增加了IO时间消耗
索引内部是有序的,有数据操作的话,索引树需要进行调整。
增删改会创建、维护索引树,如果索引比较多,数据量比较大的话,这个时间就会比较久,另外,索引也需要占用空间的,更多的索引会占用更多的磁盘空间
blob、text 这类字段,会保存到其他地方,并且通过指针,指向数据库表字段,这样就不受65535的限制了
补充:索引与优化
1、选择索引的数据类型
MySQL支持很多数据类型,选择合适的数据类型存储数据对性能有很大的影响。通常来说,可以遵循以下一些指导原则:
(1)越小的数据类型通常更好:越小的数据类型通常在磁盘、内存和CPU缓存中都需要更少的空间,处理起来更快。
(2)简单的数据类型更好:整型数据比起字符,处理开销更小,因为字符串的比较更复杂。在MySQL中,应该用内置的日期和时间数据类型,而不是用字符串来存储时间;以及用整型数据类型存储IP地址。
(3)尽量避免NULL:应该指定列为NOT NULL,除非你想存储NULL。在MySQL中,含有空值的列很难进行查询优化,因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。
问题:mysql里有2000W数据,redis只存20WW的数据,如何保证redis中的数据都是热点数据?
两个常用思路:
- 固定空间大小;
2. 设定延长时间;
可以设置过期时间短一点,每次命中加过期时间,相当于加权
优点:,没有第一种方式那么极端,直接限制内存容量。
缺点:可能某个时间点 是热点数据,然后过期时间设很长,但是接下来一段时间它不再是热点,但是因为基数大还留在里面
如果过期时间,设置成1天,有的商品已累加到30天,有的商品已累加到15天,有的商品累加到45天。那下个月,这三个商品,由于redis的过期时间到了,记录就会销毁,统计上个月的热销产品,只能统计到45天的那个。