首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL -- 扫描

mysql -h$host -P$port -u$user -p$pwd -e "select * from db1.t" > $target_file 查询数据 InnoDB的数据是保存在主键索引上,扫描实际上是直接扫描...State2,有一个读请求访问P3,P3被移动到链表的最前面 State3,要访问的数据页不在链表中,所以需要在 Buffer Pool 中新申请一个数据页Px,加到链表头部 Buffer Pool 冷数据扫描...扫描一个200G的,该为历史数据,平时没有什么业务访问它 按照基本LRU算法,就会把当前Buffer Pool里面的数据 全部淘汰 ,存入扫描过程中访问到的数据页 此时,对外提供业务服务的库来说...每次被访问的时候都需要做以下判断 如果这个数据页在LRU链表中 存在的时间 超过了1S,就把它移动到链表头部,否则,位置不变 存在时间的值由参数 innodb_old_blocks_time 控制 该策略是为了处理类似 扫描...,都被放到 old 区 一个数据页会有多条记录 ,因此 一个数据页会被访问多次 继续扫描,之前的数据页再也不会被访问到,因此也不会被移到 young 区, 最终很快被淘汰 该策略最大的收益是在扫描大的过程中

2.8K40
您找到你想要的搜索结果了吗?
是的
没有找到

定期redis

首先申明我的观点,redis本身只是缓存,不适合作为数据库使用,有说微博就是拿redis当DB用的,自己去证实吧。...第一种情况是redis实例或所在主机宕机,这可以通过复制来解决,再配以redis哨兵机制,实现自动failover。...还是类比MySQL,RDB相当于dump备,AOF则像是statement格式的binlog,保存所有redis命令。AOF能保证不丢失数据,当有误删除发生,用AOF中保存的命令去重放以恢复数据。...redis采用一主两从复制,主和从分别部署到不同主机,同时每个主机上通过不同端口开启多个redis实例。三个实例上再分别启动一个哨兵实例,同时监控多组redis master。...以上脚本在另外的备份机器上每小时定时执行一次: 0 * * * * /data/redis/redis_backup.sh 1>/data/redis/redis_backup.log 2>&1

69010

Redis(2)——跳跃

为什么使用跳跃 首先,因为 zset 要支持随机的插入和删除,所以它 不宜使用数组来实现,关于排序问题,我们也很容易就想到 红黑树/ 平衡树 这样的树形结构,为什么 Redis 不使用这样一些结构呢?...,看起来也更加直观; 基于以上的一些考虑,Redis 基于 William Pugh 的论文做出一些改进后采用了 跳跃 这样的结构。...二、跳跃的实现 Redis 中的跳跃由 server.h/zskiplistNode 和 server.h/zskiplist 两个结构定义,前者为跳跃节点,后者则保存了跳跃节点的相关信息,同之前的...Redis 跳跃默认允许最大的层数是 32,被源码中 ZSKIPLIST_MAXLEVEL 定义,当 Level[0] 有 264 个元素时,才能达到 32 层,所以定义 32 完全够用了。...元素排名的实现 跳跃本身是有序的,Redis 在 skiplist 的 forward 指针上进行了优化,给每一个 forward 指针都增加了 span 属性,用来 表示从前一个节点沿着当前层的 forward

81330

redis源码学习】跳跃

之前手写过跳表,所以概念性的东西就不多提,直接上链接:数据结构(9)-- 跳表 在redis中跳表主要应用于有序集合的底层实现。 这个别人怎么讲都意义不大,自己动手去写一下才知道其中的妙处与不容易。...然后,来学习一下redis中是如何实现跳表的,看看自己跟大师的天差地别。...文章目录 跳表整体概览 跳跃节点 跳跃结构 创建跳跃 随机数获取 创建跳跃结构 创建跳跃节点 插入节点 删除节点 删除整 跳表整体概览 1、由多层构成。...删除整 这里的英文解释挺详尽的了,代码也很清晰。从第0层开始,通过forward向后遍历,一个一个回收内存。节点都回收完了,再回收结构。...大家都是按部就班的,字符串,压缩,哈希。。。。我反而觉得压缩不如跳跃来的有意思哈哈。

40320

redis跳跃源码详解

前言 跳跃是一种有序的数据结构,他通过在每个节点中维护多个指向其它节点的指针,从而达到快速访问节点的目的。跳跃的查找操作平均时间复杂度为o(logN)。...在大部分情况下,跳跃的效率和平衡二叉树相当,且跳跃的实现更为简单。redis中有序集合的底层实现就是使用了跳跃。...tail指向为节点,level等于5,表示该跳跃中所有结点的最高层数为5(注意,不包括头结点),length等于3,表示该跳跃结点个数为3个(同样不包含头结点)。...而update[i]之所以要找这么,是因为update[i]与要删除的节点有指向关系,删除节点后,这些与之有关联的节点都需要更新。找到节点之后,调用zslDeleteNode函数。...结尾 本文章跳跃的源码来源于redis4.0.11中的t_zset.c。

2.3K51

《闲扯Redis十》Redis 跳跃的结构实现

---- 一、前言 Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要...备注: 按照分析顺序,本节应该说道有序集合对象了,但是考虑到有序集合对象的底层实现中使用到了跳跃结构,避免在分析有序集合时造成突兀,所以本节先来看看 redis 中跳跃结构的具体实现。...二、结构解析  Redis 的跳跃redis.h/zskiplistNode 和 redis.h/zskiplist 两个结构定义,其中 zskiplistNode 结构用于表示跳跃节点,而 zskiplist...四、要点总结 (1)跳跃是有序集合的底层实现之一,除此之外它在 Redis 中没有其他应用。...(2)Redis 的跳跃实现由 zskiplist 和 zskiplistNode 两个结构组成,其中 zskiplist 用于保存跳跃信息(比如表头节点、尾节点、长度),而 zskiplistNode

81620

redis源码学习】看看redis的“哈希”实现

文章目录 抛砖引玉 redis 中 哈希的实现 哈希函数 冲突解决 结构 单个节点 容量变化 rehash 服务繁忙时的渐进式rehash!!! 服务空闲时的批量rehash!!!...迭代器 间接迭代,防止大批量数据查询卷死自己 抛砖引玉 先手写一个哈希吧。...---- redis 中 哈希的实现 哈希主要看哪些方面?底层承载的数据结构、节点数据结构、哈希函数、冲突解决,还有啥?...扩容与rehash… 关于增删查改就不多说了吧,哈希的增删查改,挺常见了。...迭代器累死就算了,别把整个redis给累死啊,那问题就大了。 所以,redis采用了间接迭代的方式。 这里稍微提一下,可以参考MySQL的批量插入。 使用游标啦。。

44630

Redis 面试题解析

Redis 的概念理解 Redis 基本数据结构详解 Redis 高并发问题策略 Redis 集群结构以及设计理念 Redis 持久化机制 Redis 应用场景设计 如果你有犹豫,而且没有时间百度一下,...Redis 的特点有哪些? Redis 支持的数据类型 为什么 Redis 需要把所有数据放到内存中? Redis 适用场景有哪些? Redis 常用的业务场景有哪些?...Memcache 与 Redis 的区别都有哪些? Redis 相比 memcached 有哪些优势? Redis常用的命令有哪些? Redis 是单线程的吗? Redis 为什么设计成单线程的?...Redis 怎么实现分布式锁? 常见的淘汰算法有哪些? Redis 淘汰策略有哪些? Redis 缓存失效策略有哪些? Redis 的持久化机制有几种方式?...Redis 集群的主从复制模型是怎样的? Redis 如何做内存优化? Redis 事务相关命令有哪些? 什么是 Redis 事务?原理是什么? Redis 事务的注意点有哪些?

68410

高水位线和扫描

高水位线对扫描方式有着至关重要的影响。当使用delete 操作 表记录时,高水位线并不会下降,随之导致的是扫描的实际开销并没有任何减少。...本文给出高水位线的描述,如何降低高水位线,以及高水 位线对扫描的影响。 一、何谓高水位线     如前所述,类似于水库中储水的水位线。只不过在数据库中用于描述段的扩展方式。     ...扫描会扫描高水位线之下的所有块,包括空闲数据块(执行了delete操作)。     低高水位线       是在使用ASSM时的一个概念。...二、演示高水位线与扫描 SQL> create table t -->创建测试表 2 as 3 select rownum as id, 4 round(dbms_random.normal...19 SQL> set autotrace traceonly; -->开启autotrace SQL> select count(*) from t; -->此时SQL语句的执行计划为扫描

49120

MySQL中的扫描案例

MySQL中的扫描案例 这两天看到了两种可能会导致扫描的sql,这里给大家看一下,希望可以避免踩坑: 情况1: 强制类型转换的情况下,不会使用索引,会走扫描。...情况2: 反向查询不能使用索引,会导致扫描。...=作为条件的时候,扫描的行数是的总记录行数。因此如果想要使用索引,我们就不能使用反向匹配规则。 情况3: 某些or值条件可能导致扫描。...--------+ 1 row in set, 1 warning (0.00 sec) 可以看到单独使用id=1和id is null,都只会扫描一行记录,而使用or将二者连接起来就会导致扫描而不使用索引...简单总结一下: 1.强制类型转换的情况下,不会使用索引,会走扫描 2.反向查询不能使用索引,会导致扫描。 3.某些or值条件可能导致扫描。

2.7K20

Redis的哈希的缺点

哈希具有O(1)复杂度和快速查找特性,但是Redis中写入大量数据后,就可能发现操作有时候会突然变慢了。这其实是因为你忽略了一个潜在的风险点,那就是哈希的冲突问题和rehash可能带来的操作阻塞。...对于追求“快”的Redis来说,这是不太能接受的。所以Redis会对哈希进行rehash操作。...为了使rehash操作更高效,Redis默认使用了两个全局哈希:哈希1和哈希2。一开始,当你刚插入数据时,默认使用哈希1,此时的哈希2并没有被分配空间。...随着数据逐步增多,Redis开始执行rehash,这个过程分为三步:给哈希2分配更大的空间,例如是当前哈希1大小的两倍;把哈希1中的数据重新映射并拷贝到哈希2中;释放哈希1的空间到此,我们就可以从哈希...这个过程看似简单,但是第二步涉及大量的数据拷贝,如果一次性把哈希1中的数据都迁移完,会造成Redis线程阻塞,无法服务其他请求。此时,Redis就无法快速访问数据了。

22830
领券