物理读之LRU(最近最少被使用)的深入解析 (解释LRU_FLAG的含义)

article/2025/10/2 13:48:43

物理读之LRU(最近最少被使用)的深入解析


转载请注明出处:

http://blog.csdn.net/guoyjoe/article/details/38264883


一组LRU链表包括LRU主链,LRU辅助链,LRUW主链,LRUW辅助链,称为一个WorkSet(工作组)如下图:

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. sys@ZMDB> select CNUM_SET,CNUM_REPL,ANUM_REPL,CNUM_WRITE,ANUM_WRITE from x$kcbwds where CNUM_SET>0;  
  2.   
  3.   CNUM_SET  CNUM_REPL  ANUM_REPL CNUM_WRITE ANUM_WRITE  
  4. ---------- ---------- ---------- ---------- ----------  
  5.      15221      15221       3796          0          0  
  6.      15221      15221       3783          0          0  

CNUM_SET:工作组总的buffer总数量

 CNUM_REPL:工作组中LRU的buffer总数量(主LRU+辅LRU)

 ANUM_REPL:工作组中辅LRU总BUFFER的数量

通过隐含参数查到BUFFER的总的个数是30442,正好与上面的CNUM_SET=15221+15221

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. sys@ZMDB> @?/rdbms/admin/show_para   
  2. Enter value for p: _db_block_buffers  
  3. old  12:     AND upper(i.ksppinm) LIKE upper('%&p%')  
  4. new  12:     AND upper(i.ksppinm) LIKE upper('%_db_block_buffers%')  
  5.   
  6. P_NAME                                   P_DESCRIPTION                                      P_VALUE                        ISDEFAULT ISMODIFIED ISADJ  
  7. ---------------------------------------- -------------------------------------------------- ------------------------------ --------- ---------- -----  
  8. _db_block_buffers                        Number of database blocks cached in memory: hidden 30442                          TRUE      FALSE        FALSE  
  9.                                           Parameter  

我们用以下语句查下数据库中buffer所在LRU的状态

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. sys@ZMDB> select lru_flag,count(*) from x$bh group by lru_flag;  
  2.   
  3.   LRU_FLAG   COUNT(*)  
  4. ---------- ----------  
  5.          6        208  
  6.          2         10  
  7.          4       7122  
  8.          8      15199  
  9. 0   7646  

我们对LRU_FLAG=6,2,4,8,0等做出解释,举个例子,对于6是什么含义呢?

首先要在x$bh中找到lru_flag=6的任意的一个BUFFER

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. sys@ZMDB> select LRU_FLAG,LOWER(BA)from x$bh where lru_flag=6 and rownum=1;  
  2.   
  3.   LRU_FLAG LOWER(BA)  
  4. ---------- ----------------  
  5.          6 0000000081dae000  

DUMP buffer_cache中BH信息,如下命令:

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. sys@ZMDB> alter session set events'immediate trace name buffers level 1';  
  2.   
  3. Session altered.  
  4. ys@ZMDB> col value for a85  
  5. sys@ZMDB> select * from v$diag_info where name='Default Trace File';  
  6.   
  7.    INST_ID NAME                                               VALUE  
  8. ---------- -------------------------------------------------- -------------------------------------------------------------------------------------  
  9. 1   Default Trace File                                 /u01/app/oracle/diag/rdbms/zmdb/zmdb/trace/zmdb_ora_13235.trc  

通过BA=81dae000搜索trace文件,

/u01/app/oracle/diag/rdbms/zmdb/zmdb/trace/zmdb_ora_13235.trc

得到如下内容:

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. BH (0x81fe7e38) file#: 1 rdba: 0x0040ace1 (1/44257) class: 1 ba: 0x81dae000  
  2.   set: 6 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,25  
  3.   dbwrid: 0 obj: 421 objn: 423 tsn: 0 afn: 1 hint: f  
  4.   hash: [0x9ef9d710,0x853f8da8] lru: [0x81fe7df0,0x81fe8050]  
  5.   lru-flags: moved_to_tail on_auxiliary_list  
  6.   ckptq: [NULL] fileq: [NULL] objq: [NULL] objaq: [NULL]  
  7.   st: CR md: NULL fpin: 'kdswh06: kdscgr' tch: 1  
  8.   cr: [scn: 0x0.80350f4d],[xid: 0x0.0.0],[uba: 0x0.0.0],[cls: 0x0.80350f4d],[sfl: 0x0],[lc: 0x0.8034c532]  
  9.   flags: block_written_once redo_since_read  

LRU_FLAG=6的意思是lru-flags:moved_to_tail on_auxiliary_list,就是向LRU的辅助链表的尾部移动,这有可能是SMON从LRU的主链表上的非脏块、TCH<=1并且状态是非PIN的BUFFER被挂接到LRU辅助链表的尾部。

根据以上的方法同理可以解释出LRU_FLAG的含义:

LRU_FLAG

0==>LRU-主链冷端的头部,这个比较特殊他在DUMP没有显示LRU_FLAG


2==>LRU-主链冷端的尾部,lru-flags:moved_to_tail

 

4==>LRU-辅助链,lru-flags:on_auxiliary_list

 

6==>LRU-辅助链的尾部,lru-flags:moved_to_tail on_auxiliary_list

 

8==>LUR-主链热端,lru-flags:hot_buffer

 

当发生物理读时,Oracle会从LRU辅助链表找空闲的BUFFER,然后把LRU辅助的链上的BUFFER挂接到LRU主链的冷端头,实验如下:

首先要保证有LRU辅助链上的BUFFER,即有LRU_FLAG=6或LRU_FLAG=4,如果数据库刚刚启来,可能没有LRU_FLAG=6、LRU_FLAG=4,那需要做大量的物理读操作,才会有LRU_FLAG=6或LRU_FLAG=4

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. sys@ZMDB> alter system flush buffer_cache;  
  2.   
  3. System altered.  
  4.   
  5. sys@ZMDB> select lru_flag,count(*) from x$bh group by lru_flag;  
  6.   
  7.   LRU_FLAG   COUNT(*)  
  8. ---------- ----------  
  9.          6        208  
  10.          4      30009  
  11.          0          2  

第一次DUMP整个BUFFER CACHE:

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. sys@ZMDB> alter session set events'immediate trace name buffers level 1';  
  2. /u01/app/oracle/diag/rdbms/zmdb/zmdb/trace/zmdb_ora_13480.trc  

发生物理读

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. gyj@ZMDB> conn gyj/gyj  
  2. Connected.  
  3. gyj@ZMDB> set autot on;  
  4. gyj@ZMDB> select id,name, dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block# from gyj_t1 where id=1;  
  5.   
  6.         ID NAME                                FILE#     BLOCK#  
  7. ---------- ------------------------------ ---------- ----------  
  8.          1 gyj1                                    7        139  
  9.   
  10. Execution Plan  
  11. ----------------------------------------------------------  
  12. Plan hash value: 59758809  
  13.   
  14. ----------------------------------------------------------------------------  
  15. | Id  | Operation         | Name   | Rows  | Bytes | Cost (%CPU)| Time     |  
  16. ----------------------------------------------------------------------------  
  17. |   0 | SELECT STATEMENT  |        |     1 |    14 |    68   (0)| 00:00:01 |  
  18. |*  1 |  TABLE ACCESS FULL| GYJ_T1 |     1 |    14 |    68   (0)| 00:00:01 |  
  19. ----------------------------------------------------------------------------  
  20.   
  21. Predicate Information (identified by operation id):  
  22. ---------------------------------------------------  
  23.   
  24.    1 - filter("ID"=1)  
  25.   
  26.   
  27. Statistics  
  28. ----------------------------------------------------------  
  29.           1  recursive calls  
  30.           1  db block gets  
  31.         254  consistent gets  
  32.         248  physical reads  
  33.           0  redo size  
  34.         733  bytes sent via SQL*Net to client  
  35.         523  bytes received via SQL*Net from client  
  36.           2  SQL*Net roundtrips to/from client  
  37.           0  sorts (memory)  
  38.           0  sorts (disk)  
  39.           1  rows processed  
  40.   
  41. sys@ZMDB> select LRU_FLAG,lower(BA),TCH from x$bh where file#=7 and dbablk=139;  
  42.   
  43.   LRU_FLAG LOWER(BA)               TCH  
  44. ---------- ---------------- ----------  
  45.          0 000000007d1b2000          1  
  46.          4 0000000078558000          0  
  47.          4 0000000085f68000          0  

物理读完成后,再次dump整个buffer cache,

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. sys@ZMDB> alter session set events'immediate trace name buffers level 1';  
  2.   
  3. /u01/app/oracle/diag/rdbms/zmdb/zmdb/trace/zmdb_ora_13511.trc  

拿BA=7d1b2000,搜索第一次DUMP的trace文件

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /u01/app/oracle/diag/rdbms/zmdb/zmdb/trace/zmdb_ora_13480.trc  
  2.   
  3. BH (0x7d3e8098) file#: 3 rdba: 0x00c0586b (3/22635) class: 34 ba: 0x7d1b2000  
  4.   set: 5 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,25  
  5.   dbwrid: 0 obj: -1 objn: 0 tsn: 2 afn: 3 hint: f  
  6.   hash: [0x9efa7570,0x9efa7570] lru: [0x7f7f5d30,0x7d3e8050]  
  7.   lru-flags: on_auxiliary_list  
  8.   ckptq: [NULL] fileq: [NULL] objq: [NULL] objaq: [NULL]  
  9.   st: FREE md: NULL fpin: 'ktuwh03: ktugnb' tch: 0 lfb: 33  
  10.   flags:  

拿BA=7d1b2000,搜索第二次DUMP的trace文件

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /u01/app/oracle/diag/rdbms/zmdb/zmdb/trace/zmdb_ora_13511.trc  
  2.   
  3. BH (0x7d3e8098) file#: 7 rdba: 0x01c0008b (7/139) class: 1 ba: 0x7d1b2000  
  4.   set: 5 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,25  
  5.   dbwrid: 0 obj: 22919 objn: 19567 tsn: 7 afn: 7 hint: f  
  6.   hash: [0x787e4bd8,0x9e4cda50] lru: [0x7f7f5d30,0x7d3e8050]  
  7.   ckptq: [NULL] fileq: [NULL] objq: [0x9a88e518,0x7d3e8078] objaq: [0x9a88e508,0x7d3e8088]  
  8.   st: XCURRENT md: NULL fpin: 'kdswh11: kdst_fetch' tch: 1  
  9.   flags: only_sequential_access  
  10.   LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [65535]  

从上面的两个trace可以得出结论ba: 0x7d1b2000

从lru-flags: on_auxiliary_list(LRU_FLAG=4)到LRU-主链冷端的头部,这个比较特殊在DUMP没有显示LRU_FLAG(LRU_FLAG=0)

 

观察LRU TCH>=2时冷端移到热端

 

1、BUFFER手动设为100M

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. ALTER SYSTEM SET memory_max_target=0 scope=spfile;  
  2.   ALTER SYSTEM SET memory_target=0;  
  3.  alter system set sga_target=0;  
  4.   
  5.    
  6. create table gyj1_t80 (id int,name char(2000));  
  7.   
  8. create table gyj2_t80 (id int,name char(2000));  
  9.   
  10. begin  
  11.   for i in 1 .. 30000  
  12.   loop  
  13.     insert into gyj1_t80 values(i,'gyj'||i);  
  14.  commit;  
  15.  end loop;  
  16. end;  
  17. /  
  18.   
  19. SQL> SQL> select bytes/1024/1024||'M' from dba_segments where segment_name='GYJ1_T80' and owner='GYJ';  
  20.   
  21. BYTES/1024/1024||'M'  
  22. -----------------------------------------  
  23. 80M  
  24.   
  25.   
  26. begin  
  27.   for i in 1 .. 30000  
  28.   loop  
  29.     insert into gyj2_t80 values(i,'gyj'||i);  
  30.  commit;  
  31.  end loop;  
  32. end;  
  33. /  
  34.   
  35.   
  36. create index idx_gyj1_t80m on gyj1_t80(id);  
  37.   
  38. create index idx_gyj2_t80m on gyj2_t80(id);  
  39.   
  40. SQL> show user;  
  41. USER is "GYJ"  
  42. SQL> conn / as sysdba  
  43. Connected.  
  44. SQL> shutdown immediate;  
  45. Database closed.  
  46. Database dismounted.  
  47. ORACLE instance shut down.  
  48. SQL> startup  
  49. ORACLE instance started.  

第一次dump

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. SQL> alter session set events'immediate trace name buffers level 1';  
  2.   
  3. Session altered.  
  4.   
  5.   
  6. SQL> select * from v$diag_info where name='Default Trace File';  
  7.   
  8.    INST_ID NAME  
  9. ---------- --------------------  
  10. VALUE  
  11. --------------------------------------------------------------------------------  
  12.          1 Default Trace File  
  13. /u01/app/oracle/diag/rdbms/jfdb/jfdb/trace/jfdb_ora_7210.trc  

发生一个物理读走索引

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. set autot on  
  2. select id,name,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block# from gyj1_t80 where id=1;  
  3.   
  4.   
  5. SQL> select id,name,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block# from gyj1_t80 where id=1;  
  6.   
  7.         ID NAME                      FILE#     BLOCK#  
  8. ---------- -------------------- ---------- ----------  
  9.          1 gyj1                          5        581  
  10.   
  11.   
  12. select LRU_FLAG,lower(BA),TCH from x$bh where file#=5 and dbablk=581;  
  13. SQL> select LRU_FLAG,lower(BA),TCH, decode(state,0,'free',1,'xcur',2,'scur'  
  14.   2   ,3,'cr', 4,'read',5,'mrec',6,'irec',7,'write',8,'pi', 9,'memory',10,'mwrite',11,  
  15.   3  'donated', 12,'protected',  13,'securefile', 14,'siop',15,'recckpt', 16, 'flashf  
  16.   4  ree',  17, 'flashcur', 18, 'flashna')  from x$bh where file#=5 and dbablk=581;  
  17.   
  18.   LRU_FLAG LOWER(BA)               TCH DECODE(STA  
  19. ---------- ---------------- ---------- ----------  
  20.          0 000000009fca8000          1 xcur  
  21.   
  22.   
  23. SQL> select LRU_FLAG,lower(BA),TCH from x$bh where file#=5 and dbablk=581;  
  24.   
  25.   LRU_FLAG LOWER(BA)               TCH  
  26. ---------- ---------------- ----------  
  27.          0 000000009fca8000          5  
  28.   
  29.   
  30.   
  31.   
  32. SQL> set autot traceonly;  
  33. SQL>  select /*+ index(G) */ count(name) from gyj1_t80 G where id<=8000;  
  34.   
  35.   
  36. SQL> select LRU_FLAG,lower(BA),TCH from x$bh where file#=5 and dbablk=581;  
  37.   
  38.   LRU_FLAG LOWER(BA)               TCH  
  39. ---------- ---------------- ----------  
  40.          0 000000009fca8000          6  

再次发生物理读,此时LRU_FLAG=0变为8,同时TCH=8重置为0

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. SQL> select LRU_FLAG,lower(BA),TCH from x$bh where file#=5 and dbablk=581;  
  2.   
  3.   LRU_FLAG LOWER(BA)               TCH  
  4. ---------- ---------------- ----------  
  5.          0 000000009fca8000          8  
  6.   
  7. SQL> select LRU_FLAG,lower(BA),TCH from x$bh where file#=5 and dbablk=581;  
  8.   
  9.   LRU_FLAG LOWER(BA)               TCH  
  10. ---------- ---------------- ----------  
  11.          8 000000009fca8000          0  
  12.   
  13.   
  14. BH (0x9ffe02a8) file#: 5 rdba: 0x01400245 (5/581) class: 1 ba: 0x9fca8000  
  15.   set: 5 pool: 3 bsz: 8192 bsi: 0 sflg: 2 pwc: 15,19  
  16.   dbwrid: 0 obj: 13537 objn: 13537 tsn: 5 afn: 5 hint: f  
  17.   hash: [0xb6a86de0,0xb6a86de0] lru: [0x9ffe0260,0x9ffe9a60]  
  18.   lru-flags: hot_buffer  
  19.   ckptq: [NULL] fileq: [NULL] objq: [0x9ffe0618,0x9ffe0028] objaq: [0x9ffe0628,0x9ffe0038]  
  20.   st: XCURRENT md: NULL fpin: 'kdswh05: kdsgrp' tch: 0  
  21.   flags:  
  22.   LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [65535]  

当TCH=0时,再发生大量物理读,地址为9fca8000的BUFFER就被重用了,彻底从BUFFER消失

[html] view plain copy 在CODE上查看代码片 派生到我的代码片
  1. SQL>  select LRU_FLAG,lower(BA),TCH from x$bh where file#=5 and dbablk=581;  
  2.   
  3.   LRU_FLAG LOWER(BA)               TCH  
  4. ---------- ---------------- ----------  
  5.          8 000000009fca8000          0  
  6.   
  7. SQL>  select LRU_FLAG,lower(BA),TCH from x$bh where file#=5 and dbablk=581;  
  8. no rows selected   


通过实验,我们更清楚地了解到物理读LRU的基本流程,可以进一步理解物理读内部的LRU算法。



http://chatgpt.dhexx.cn/article/Nr6u9Tjs.shtml

相关文章

LRU(最近最少使用)缓存机制

title: LRU缓存机制 categories: 操作系统 tags: 操作系统LRUOS计算机知识 LRU(最近最少使用)缓存机制 LRU&#xff1a;最近最少使用缓存机制 其设计的原则依据&#xff1a;如果一个数据在最近一段时间没有被访问到&#xff0c;那么在将来它被访问的可能性也很小。也就是…

LRU简单实现-了解一下?

LRU 算法 LRU 是一种作为缓存的算法&#xff0c;像 CPU 缓存&#xff0c;数据库缓存&#xff0c;浏览器缓存。以及在移动端开发时的图片安缓存&#xff0c;采用 LRU 缓存策略的应用很广泛。在面试中也是常常考察的一个点。当然也有其他缓存方法&#xff0c;常见的策略有三种&a…

LRU总结

文章目录 [146. LRU 缓存机制](https://leetcode-cn.com/problems/lru-cache/)ACM模式LRU 在 MySQL 中的应用LRU 在 Redis 中的应用面试官&#xff1a;来&#xff0c;手写一个线程安全并且可以设置过期时间的LRU缓存 146. LRU 缓存机制 力扣原题 class Node{public int key;pu…

html ur是什么意思_url是什么意思?

实际上,我们在使用互联网的过程中,其中有许多东西都是只会用,而不知道它到底是啥名字,看见了也不理解它是做什么的,比如今天我将和大家说的URL,实际上就是我们在互联网生活中非常常见的一个东西。 web前端学习:打造全网web前端全栈资料库(总目录)看完学的更快,掌握的…

LRU 缓存(Java)

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返回 -1…

LRU算法的理解,终于懂了

https://blog.csdn.net/luoweifu/article/details/8297084 以上是让我看明白的博客链接。 下面是我自己的理解&#xff0c;比如下面这道题&#xff1a; 可以这么来看&#xff0c;有一个容量为6的容器&#xff0c;每次放进去一个有编号的球&#xff0c;如果容器中有相同编号…

LRU缓存

一、什么是LRU算法 LRU&#xff0c;Least Recently Used算法&#xff0c;即一种缓存淘汰策略。 计算机的缓存容量有限&#xff0c;若缓存满了则需要删除一些内容&#xff0c;给新的缓存腾出空间&#xff0c;但问题是要删除哪些内容呢&#xff1f;当然是把用的少的缓存删掉&am…

【网络】HTTP 协议中 URI 和 URL 有什么区别?

HTTP定义 超文本传输协议&#xff08;Hyper Text Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出 HTTP是用…

LRU缓存机制,你想知道的这里都有

概述 LRU是Least Recently Used的缩写&#xff0c;译为最近最少使用。它的理论基础为 “最近使用的数据会在未来一段时期内仍然被使用&#xff0c;已经很久没有使用的数据大概率在未来很长一段时间仍然不会被使用” 由于该思想非常契合业务场景 &#xff0c;并且可以解决很多实…

LRU简单实现-了解一下

LRU 算法 LRU 是一种作为缓存的算法&#xff0c;像 CPU 缓存&#xff0c;数据库缓存&#xff0c;浏览器缓存。以及在移动端开发时的图片安缓存&#xff0c;采用 LRU 缓存策略的应用很广泛。在面试中也是常常考察的一个点。当然也有其他缓存方法&#xff0c;常见的策略有三种&a…

数据分析:RFM模型

补充&#xff1a; RFM分析方法&#xff1a;如何对用户按价值分类 深入解读和应用RFM分析方法(模型) 深入解读RFM模型-实战应用干货 转载自&#xff1a; 接地气的陈老师|作者 接地气学堂|来源&#xff1a;https://mp.weixin.qq.com/s/00vJPb9xqx4NL5Y5cPDXsw 问他咋做数据分…

数据分析之RFM模型

一.均值 RFM模型算法 从csv文件中读取相应的数据 datapd.read_csv(./dataset.csv,encodingISO-8859-1)#读取2014年的客户信息 data_14data[data[Order-year]2014] data_142.获取相应的列 data_14 data_14[[CustomerID,OrderDate,Sales]] data_14 CustomerID为用户id OrderD…

【数据分析】基于RFM模型的线上零售中的客户细分(二):RFM模型实战

基于RFM模型的线上零售中的客户细分&#xff08;二&#xff09; 摘要&#xff1a;在上一篇博客《基于RFM模型的线上零售中的客户细分&#xff08;一&#xff09;&#xff1a;客户细分》中&#xff0c;我们了解了什么是客户细分&#xff0c;这篇博客将会结合具体的商业实例介绍同…

数据分析 一文搞懂什么是RFM模型

数据分析 | 一文搞懂什么是RFM模型 想知道你在电商平台心里的地位吗&#xff1f;学会RFM分析法&#xff0c;你自然知道 大家好&#xff0c;我是翔宇&#xff01;今天我们来了解做数据分析一定要会的分析方法之一----RFM分析法。 相信大家在前天的双十一一定也多多少少贡献了…

RFM模型原理详解与实操运用

RFM模型原理详解与实操运用 RFM模型原理介绍为什么要使用RFM模型RMF模型原理介绍RFM模型用户细分 RFM模型实例操作背景/数据介绍RFM模型异化构建代码实现 最近在 运营课程中学习了RFM模型&#xff0c;又正正好在 商务智能的课程中学习了使用K-Means聚类分析实现RFM的操作。 …

如何利用RFM分析模型进行数据分析?

RFM模型 RFM主要根据客户活跃程度和平台交易金额贡献所做的分类。 近度&#xff1a;用字母R表示&#xff0c;代表客户最近一次的活跃距离目前的天数。在这部分客户中&#xff0c;有些优质客户值得通过一定的营销手段进行激活。 频度&#xff1a;用字母F表示&#xff0c;代表…

对RFM模型的理解

客户价值可以衡量客户对企业的相对重要性&#xff0c;是企业进行差异化决策的重要标准。 由此&#xff0c;通过客户价值分类可以为企业进行差异化营销策略奠定基础。 RFM模型对客户价值分类时非常简单的一种模型 以下从几大模块说一下个人对RFM模型的理解。 1.RFM模型是什么 …

RFM分析方法

RFM分析方法 RFM分析方法RFM指标介绍RFM指标作用如何使用RFM分析方法如何精细化运营 如何给R、F、M打分-采用数据分组确定分组的范围和标准利用VLOOKUP匹配函数函数 RFM分析方法 RFM指标介绍 R:最近一次消费时间间隔&#xff08;Recency&#xff09; R越小用户价值越高F:消费…

用户行为分析模型——RFM模型

用户行为分析模型——RFM模型 1. RFM模型2. RFM模型分析应用 1. RFM模型 RFM模型根据客户活跃程度和交易金额的贡献&#xff0c;进行客户价值细分的一种方法。 R&#xff08;Recency&#xff09;——最近一次交易时间间隔。基于最近一次交易日期计算的得分&#xff0c;距离当前…

客户价值模型:RFM

文章目录 1.1、RFM 模型引入1.1.1、RFM 模型介绍1.1.1.1、一般情况下RFM模型可以说明下列几个事实&#xff1a;1.1.1.2、对最近一个月内所有用户订单数据进行统计RFM值&#xff1a; 1.1.2、RFM 模型的三个指标&#xff1a;1.1.2.1、R&#xff1a;最近一次消费&#xff08;recen…