SAP缓存 表缓存( Table Buffering)

本文主要介绍SAP中的表缓存在查询数据,更新数据时的工作情况以及对应概念。

SAP表缓存的工作

查询数据

更新数据

删除数据

表缓存的概念

表缓存技术设置属性

不允许缓冲:

允许缓冲,但已关闭:

缓冲已激活:

已缓冲单个记录

通用区域缓冲:

完全缓冲:

OPEN SQL不使用缓冲区的情

SAP表缓存的工作
查询数据

激活ST05并执行如下OPEN SQL查询语句(新建表,无数据)

缓冲监视器中出现一条记录(即使数据不存在,也会将对应键记录,下一次获取不存在的记录会更快)

查看ST05跟踪如下

第一次执行OPEN SQL 时是做了三步操作

第一步:查询缓存中是否存在该记录

第二步:缓存中无该查询数据的记录,查询数据库该表当前client所有记录(表设置为通用区域缓冲,通用键值为client)并更新缓冲区(无数据,仍然记录键值,以备下一次查询)

第三步:续第一步查询缓冲中的结果并返回

第二次执行OPEN SQL 直接从缓冲区查询结果,然后返回

更新数据

激活ST05并执行如下OEPN SQL更新语句

缓冲监视器记录,记录已失效

ST05跟踪记录(PS:这就是为什么modify比insert慢的原因)

更新数据库数据,并更新缓冲区

激活ST05并执行如下OPEN SQL查询语句

ST05跟踪结果

数据更新后五次的数据库访问将不经过缓存,第六次访问优先读取缓冲区,符合前述测试场景。

删除数据

激活ST05并执行如下OPEN SQL删除语句(被删除数据本身不存在)

缓冲监视器中记录无更新,ST05跟踪无缓冲更新记录,不影响后续执行查询语句的缓冲访问

激活ST05并执行如下OPEN SQL删除语句(被删除数据存在)

缓冲监视器记录中上次失效时间更新

ST05跟踪记录中有缓冲失效记录

此时执行查询语句ST05跟踪结果与更新时一致

PS: 上述所有操作均基于OPEN SQL,多台服务器实例还涉及缓冲区同步,如下截图

表缓存的概念

        SAP缓冲发生在每个应用程序服务器的共享内存中。SAP缓冲区由一个中央管理结构、一个按字母顺序排列的表目录和一个数据区组成。一般缓冲表或数据库视图的各个区域作为单独的完全缓冲表进行管理。缓冲的数据作为内部表保存在数据区域中。数据区域使用SAP内存管理进行管理。

        当使用Open SQL访问缓冲表或视图时,首先在表目录中搜索表的名称,然后对数据进行二进制搜索。

        在单记录缓冲和通用缓冲中,也会保存表或视图中不存在的行的信息。第一次读取不存在的行时,主键或泛型键的键值将加载到具有(否则为空)行和适当标志的相关数据区域中。下次尝试读取此行时,缓冲区已指示此行不存在。

        单记录缓冲区的管理不如通用缓冲区或全缓冲区有效。在单记录缓冲中,行被逐个加载到数据区的内部表中。在通用缓冲和完全缓冲中,表或视图的所有数据都在一个步骤中加载并在数据库中排序。

        缓冲区监视器

        缓冲区监视器是一个SAP内存管理工具(事务ST02),用于分析当前应用程序服务器的SAP缓冲区。这包括以下任务:

◾显示过去几天应用程序服务器上的缓冲区负载

◾显示和修改关联的配置文件参数

◾显示有关表缓冲区的详细信息

◾显示用于分析缓冲区有效性的表统计信息。当优化相关的配置文件参数和检测昂贵缓冲的表时,显示的值是有用的。

表缓存技术设置属性

不允许缓冲:

        Open SQL总是直接访问数据表的当前数据。该表在任何其他系统中也不应启用SAP缓冲。

允许缓冲,但已关闭:

        交付时,该表不允许SAP缓冲,但是原则上在其它系统可以根据表的使用激活缓冲。

缓冲已激活:

        该表执行缓冲,如果可能,Open SQL语句访问共享内存中的SAP缓冲而不是直接访问表。

已缓冲单个记录

        只有表中那些实际被访问的行才被缓冲。与使用通用缓冲或完全缓冲相比,这需要更少的缓冲空间。另一方面,需要更多的管理工作,并且需要更直接的数据库访问。

        如果WHERE子句用于访问非缓冲行,并且此子句指定使用and联接的相等条件,则会尝试加载此行。如果找不到该行,则会在缓冲区中进行记录,并使用完全指定的WHERE子句来避免在下次读取时访问新的数据库。

注意事项

◾使用单记录缓冲时,任何Open SQL语句都必须尊重完整的主键,以防止它们绕过SAP缓冲。

◾对于经常读取单行的大型表,建议使用单记录缓冲。在读取许多行的较小表中,通常首选全缓冲,因为这减少了需要加载的直接数据库访问次数。

◾单记录缓冲区的使用仅由WHERE子句指定,而不使用single加法。

通用区域缓冲:

        当对一行执行读取时,所有行都会加载到SAP缓冲区中,这些行与主键左对齐部分的此行相匹配。所涵盖的关键字段的数量在定义中指定,并且始终小于关键字段的总数。这些键字段合在一起就是通用键。

        单独的泛型区域像独立的表或视图一样处理,它们的主键是泛型键,并且是完全缓冲的。

        如果在Open SQL中使用完全指定的泛型键访问未缓冲的行,则会尝试加载该区域。如果找不到行,则会在缓冲区中记录这一点,并且下次使用完全指定的泛型键访问行时不会再次访问数据库。

注意事项

◾在一般缓冲的表或视图中,对不存在的数据的访问非常快。

◾使用通用缓冲时,任何Open SQL语句都必须考虑通用关键字,以防止它们绕过SAP缓冲。

◾如果通常只需要表或视图的某些区域,则应使用通用缓冲。这些区域不应太小,以防止创建过多的区域并使缓冲区管理过载。它们也不应该太大,以防止加载过多的数据。在某些情况下,完全缓冲也可能更有效。因此,通用关键字不能覆盖太多或太少的字段。

完全缓冲:

        读取一行时,表或视图中的所有行都会加载到SAP缓冲区。缓冲的表或视图要么完全在缓冲区中,要么根本不在。在缓冲区中,缓冲的数据记录按表或视图的键进行排序。优化访问要求主键或辅助索引字段的左对齐部分尽可能大。如果不是,则以线性方式扫描缓冲区。

        如果在特定于客户端的表或视图中打开了完全缓冲,则会在内部执行使用客户端列作为泛型键的泛型缓冲。

注意事项

◾在完全缓冲的表或视图中,对不存在的数据的访问非常快。

◾应在小表中使用完全缓冲,例如自定义表。在较大的表中,只有在频繁读取大量数据的情况下,完全缓冲才是值得的。应该很少对完全缓冲的表执行写入操作。

OPEN SQL不使用缓冲区的情况

SELECT 语句使用FOR UPDATE,DISTINCT,UNION,聚合表达式,JOIN连接,GROUP BY,ORDER BY

使用了关键字CLIENT SPECIFIED 但是WHERE 条件中没有client ID

WHERE条件中使用了IS NULL的判断

在WHERE条件中使用子查询。

WHERE条件将一列与from之后指定的数据库表或数据库视图中的另一列进行比较

访问具有单个记录缓冲的表或视图,而不指定(在WHERE条件中)主键的所有键字段的所有由AND连接的相等条件。

对一般缓冲区的访问,而不完全指定由WHERE条件中的AND连接的相等条件。

如果违反了精确指定通用区域的要求(如上所述),则在访问具有通用缓冲的表或视图时使用FOR ALL ENTRIES进行选择。FOR ALL ENTRIES之后的条件不能在多个常规区域之间产生OR关系。

WHRE条件列不是按正确顺序排列的主键的左对齐子集或者其中的列使用了DESCENDING

读取为其定义了替换对象的数据库表或数据库视图。

在使用写语句使缓冲区中的某个条目无效后,默认情况下,接下来五次本应访问该条目的读取将绕过当前应用程序服务器的缓冲区。对更改的条目执行的下一次读取会将其重新加载到缓冲区中,并删除无效项。在配置文件参数zcsa/sync_reload_c中指定了在重新加载之前绕过缓冲区的读取次数。

注意:

        出于性能原因,访问缓冲的数据库表或视图时应注意使用上述添加绕过SAP缓冲区。要显式绕过SELECT语句中的SAP缓冲区,应始终使用添加的BYPASSING buffer。仅仅依靠上面添加的隐含行为是不够的。        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/226992.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flask笔记

一:模板渲染 一般的话都序列化成字符串 二:项目拆分 2.1 项目拆分 app.py init.py views.py models.py 模型数据 2.2 蓝图 三:路由参数 3.1 String 重点 3.2 int 3.3 path 3.4 UUID 3.5 any 四:请求方式 五:Requ…

【经典算法】有趣的算法之---蚁群算法梳理

every blog every motto: You can do more than you think. 0. 前言 蚁群算法记录 1. 简介 蚁群算法(Ant Clony Optimization, ACO)是一种群智能算法,它是由一群无智能或有轻微智能的个体(Agent)通过相互协作而表现出智能行为,从而为求解复杂问题提供了一个新的可能性…

WPF 漂亮长方体、正文体简单实现方法 Path实现长方体 正方体方案 WPF快速实现长方体、正方体的方法源代码

这段XAML代码在WPF中实现了一个类似长方体视觉效果的图形 声明式绘制:通过Path、PathGeometry和PathFigure等元素组合,能够以声明方式精确描述长方体每个面的位置和形状,无需编写复杂的绘图逻辑,清晰直观。 层次结构与ZIndex控制…

机器学习距离度量方法

1. 机器学习中为什么要度量距离? 机器学习算法中,经常需要 判断两个样本之间是否相似 ,比如KNN,K-means,推荐算法中的协同过滤等等,常用的套路是 将相似的判断转换成距离的计算 ,距离近的样本相…

MySQL入门教程-触发器

9.触发器 什么是触发器 触发器(trigger):监视某种情况,并进行某种操作,它的执行并不是程序调用,也不是手工启动,而是由事件来触发,例如:对一张表进行操作(插入,更新&…

初识Java并发,一问读懂Java并发知识文集(3)

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

全院级PACS系统源码,集成放射科管理RIS系统,支持多种图像处理及三维重建功能

PACS系统是医院影像科室中应用的一种系统,主要用于获取、传输、存档和处理医学影像。它通过各种接口,如模拟、DICOM和网络,以数字化的方式将各种医学影像,如核磁共振、CT扫描、超声波等保存起来,并在需要时能够快速调取…

【项目管理】CMMI-项目总结报告模版

1、文档目录结构 2、计划与实际情况对比 3、开放工作评价

【中小型企业网络实战案例 五】配置可靠性和负载分担

【中小型企业网络实战案例 三】配置DHCP动态分配地址-CSDN博客 【中小型企业网络实战案例 四】配置OSPF动态路由协议 【中小型企业网络实战案例 二】配置网络互连互通-CSDN博客 【中小型企业网络实战案例 一】规划、需求和基本配置_大小企业网络配置实例-CSDN博客 配置VRRP联…

Android MVVM 写法

前言 Model:负责数据逻辑 View:负责视图逻辑 ViewModel:负责业务逻辑 持有关系: 1、ViewModel 持有 View 2、ViewModel 持有 Model 3、Model 持有 ViewModel 辅助工具:DataBinding 执行流程:View &g…

共享单车之数据分析

文章目录 第1关:统计共享单车每天的平均使用时间第2关:统计共享单车在指定地点的每天平均次数第3关:统计共享单车指定车辆每次使用的空闲平均时间第4关:统计指定时间共享单车使用次数第5关:统计共享单车线路流量 第1关…

关于log4j的那些坑

背景:工程中同时存在log4j.xml&log4j2.xml maven依赖如下: 此时工程实际使用的日志文件为log4j.xml 1、当同时设置log4j和log4j2的桥接依赖时 maven依赖如下: 此时启动会有警告日志: 点击告警日志链接:https://…

基于OpenAI的Whisper构建的高效语音识别模型:faster-whisper

1 faster-whisper介绍 faster-whisper是基于OpenAI的Whisper模型的高效实现,它利用CTranslate2,一个专为Transformer模型设计的快速推理引擎。这种实现不仅提高了语音识别的速度,还优化了内存使用效率。faster-whisper的核心优势在于其能够在…

YOLOv8改进 | 主干篇 | EfficientNetV1均衡缩放网络改进特征提取层

一、本文介绍 这次给大家带来的改进机制是EfficientNetV1主干,用其替换我们YOLOv8的特征提取网络,其主要思想是通过均衡地缩放网络的深度、宽度和分辨率,以提高卷积神经网络的性能。这种方法采用了一个简单但有效的复合系数,统一…

mac安装k8s环境

安装kubectl brew install kubectl 确认一下安装的版本 kubectl version --client 如果想在本地运行kubernetes 需要安装minikube brew install minikube 需要注意安装minikube需要本地的docker服务是启动的 启动 默认连接的是google的仓库 minikube start 指定阿…

HTML实战演练之贪吃蛇美食大作战

导入: 一 :粉丝要求 今天一位小伙伴私信我说,想玩HTML贪吃蛇美食大作战,自己也是学HTML的,希望我能安排一下,那么好它来了 需知: 一:别着急先看需要知道的 要用HTML开发贪吃蛇美食…

【Java中序列化的原理是什么(解析)】

🍁序列化的原理是什么? 🍁典型-----解析🍁拓展知识仓🍁Serializable 和 Externalizable 接门有何不同? 🍁如果序列化后的文件或者原始类被篡改,还能被反序列化吗?🍁serialVersionU…

【机组期末速成】指令系统|机器指令概述|操作数类型与操作类型|寻址方式|指令格式

🎥 个人主页:深鱼~🔥收录专栏:计算机组成原理🌄欢迎 👍点赞✍评论⭐收藏 目录 前言: 一、本章考点总览 二、考点分析 1、以下有关指令系统的说法中错误的是( )。 2…

直方图与均衡化

直方图 统计图像中相同像素点的数量。 使用cv2.calcHist(images, channels, mask, histSize, ranges)函数 images:原图像图像格式为uint8或float32,当传入函数时应用[]括起来,例如[img]。 channels:同样用中括号括起来&#xff…

2011年AMC8数学竞赛中英文真题典型考题、考点分析和答案解析

今天是2023年12月30日,距离2024年元旦新年还有2天时间,先预祝所有的读者和小读者想今年工作、学习进步!幸福平安! 今天距离2024年1月19日的AMC8正式比赛只有20天的时间,我们继续来看AMC8竞赛的历年真题典型考题和解析…