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.mzph.cn/news/584666.shtml

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

相关文章

搜索引擎推广的实践技巧提升你的品牌影响力-华媒舍

搜索引擎推广是一种有效提升品牌影响力的推广策略。通过关键词优化、广告创意设计、定向投放和数据分析与优化等实践技巧,可以提高品牌的知名度、点击率和转化率。在实施引擎霸屏推广之前,还需对实践效果进行评估,以确保推广策略的有效性和适…

鸿蒙Harmony(七)ArkUI--循环foreachList组件自定义组件

循环foreach import Prompt from system.promptclass Item {icon: Resourcename: stringprice: numberconstructor(icon: Resource, name: string, price: number) {this.icon iconthis.name namethis.price price} }Entry Component struct Index {State message: string …

百度地图添加坐标点

​​​​​​html <!DOCTYPE html><html xmlns"http://www.w3.org/1999/xhtml"> <head runat"server"><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title>查看签到信息-地图…

钡铼技术集IO数据采集可编程逻辑控制PLC无线4G环保物联网关

背景 数据采集传输对于环保企业进行分析和决策是十分重要的&#xff0c;而实时数据采集更能提升环保生产的执行力度&#xff0c;从而采取到更加及时高效的措施。因此实时数据采集RTU成为环保企业的必备产品之一。 产品介绍 在推进环保行业物联网升级过程中&#xff0c;环保RTU在…

楼宇智慧能源消耗监测管理系统,楼宇中的能源“管家”

随着人口的增加&#xff0c;楼宇数据呈上涨趋势&#xff0c;但是楼宇智能建设在我国普及性远远不足&#xff0c;相比传统楼宇控制&#xff0c;智能楼宇控制系统对于楼宇内部的用电设备控制&#xff0c;能够更加的节约能源&#xff0c;降低成本。对于现代化楼宇而言&#xff0c;…

一款超酷的一体化网站测试工具:Web-Check

Web-Check 是一款功能强大的一体化工具&#xff0c;用于发现网站/主机的相关信息。用于检查网页的工具&#xff0c;用于确保网页的正确性和可访问性。它可以帮助开发人员和网站管理员检测网页中的错误和问题&#xff0c;并提供修复建议。 它只需要输入一个网站就可以查看一个网…

什么是爬虫,为什么爬虫会导致服务器负载跑满

在我们日常使用服务器的过程中&#xff0c;经常会有遇到各种各样的问题。今天就有遇到用户来跟德迅云安全反馈自己服务器负载跑满&#xff0c;给用户详细排查后也未发现异常&#xff0c;抓包查看也没有明显攻击特征&#xff0c;后续查看发现是被爬虫爬了&#xff0c;调整处理好…

连理:保险中的实名DID创新应用

2023年12月12日&#xff0c;BSN实名DID服务发布会在北京成功举办&#xff0c;会上正式发布了BSN实名DID服务。这一服务充分融合了BSN区块链服务网络和CTID数字身份链两大基础设施&#xff0c;满足“前台匿名、后台实名”的管理要求&#xff0c;对服务数字经济发展、支撑国家数据…

Springer build pdf乱码

在textstudio中编辑时没有错误&#xff0c;在editor manager生成pdf时报错。 首先不要改源文件&#xff0c;着重看你的上传顺序&#xff1a; 将.tex文件&#xff0c;.bst文件&#xff0c;.cls文件&#xff0c;.bib文件, .bbl文件的类型&#xff0c;在editor manager中是Item。…

archiver error. Connect internal only, until freed.

[64000][257] ORA-00257: archiver error. Connect internal only, until freed.原因 归档日志写满了、闪回日志写满了(根本原因是服务器磁盘写满了) # 切换到oracle服务 su - oracle# 使用sysdba用户登录 解决方案:(https://blog.csdn.net/qq_37635373/article/details/933282…

thinkphp+vue_mysql汽车租赁管理系统1ma2x

运行环境:phpstudy/wamp/xammp等 开发语言&#xff1a;php 后端框架&#xff1a;Thinkphp5 前端框架&#xff1a;vue.js 服务器&#xff1a;apache 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat/phpmyadmin 课题主要分为三大模块&#xff1a;即管理员模块、用户模块…

利用 PEB_LDR_DATA 结构枚举进程模块信息

1. 引言 我们常常通过很多方法来获取进程的模块信息&#xff0c;例如 EnumProcessModules 函数、CreateToolhelp32Snapshot 函数、WTSEnumerateProcesses 函数、ZwQuerySystemInformation 函数等。但是调用这些接口进行模块枚举的原理是什么我们并不知道。通过学习 PEB 中 PEB…

Stable Diffusion WebUI安装合成面部说话插件SadTalker

SadTalker可以根据一张图片、一段音频&#xff0c;合成面部说这段语音的视频。图片需要真人或者接近真人。 安装ffmpeg 下载地址&#xff1a; https://www.gyan.dev/ffmpeg/builds/ 下载ffmpeg-git-full.7z 后解压&#xff0c;将解压后的目录\bin添加到环境变量的Path中。 在…

出海合规云安全,AWS Landing Zone解决方案建立安全着陆区

在出海的大环境中&#xff0c;企业数字化转型的趋势之一就是上云。然而&#xff0c;上云也带来了新的挑战&#xff0c;特别是对企业的 IT 建设和管理提出了更高的要求。为了构建一个安全合规的云上信息系统环境&#xff0c;满足企业中不同用户的快速增长、资源访问可控、成本可…

Tips:电池电源电压转换为220V

今天在进行操作的时候&#xff0c;看到一个新的东西&#xff0c;就是如何普通的电瓶电压转化为220V交流电。 当在室外或者工作地距离电源比较远的情况下&#xff0c;一般是选取拉线的方式进行采电&#xff0c;但是当距离电源过远&#xff0c;使用拉线的方式就不可用了。如何在…

2023年最后一篇博客!

首先祝大家周末快乐&#xff01;元旦快乐&#xff01; 今天不聊技术哦 01哀叹2023 2023年只剩2天了&#xff01;转眼间又是一年到头了&#xff0c;这一年我做了什么呢&#xff1f;回过头来一想&#xff0c;什么都没有做。也尝试过做不少事情&#xff0c;但都是没有一个好的结…

小程序中拖拽和缩放图片

需求&#xff1a;点击元素后选中&#xff0c;出现缩放按钮&#xff0c;拖动缩放按钮可实现元素的缩放&#xff1b;并且元素本身是可以拖动的。 html&#xff1a; <block wx:for"{{imageControls}}" wx:key"index"><view hidden"{{item.hidd…

对SPI总线上挂接多个X5045的读写操作

#include<reg51.h> //包含单片机寄存器的头文件 #include<intrins.h> //包含_nop_()函数定义的头文件 sbit SCKP3^4; //将SCK位定义为P3.4引脚 sbit SIP3^5; //将SI位定义为P3.5引脚 sbit SOP3^6; //将SO位定义为P3.6引脚 sbit CS1P3^7; …

华为发布的工业软件三大难题:面向CAE分析的高质量曲面贴体网格的生成问题

以下内容转载&#xff1a; 网格生成&#xff0c;是把一个特定的研究区域分割成由许多很小的子区域(元素)&#xff0c;以满足一些特定的要求。在理想的情况下&#xff0c;网格中的每个元素的形状和分布可以通过一种自动的网格生成算法来确定。 结构网格生成的代数网格生成法和…

10.Go 映射

映射&#xff08;map&#xff09;是一种特殊的数据结构&#xff0c;用于存储一系列无序的键值对&#xff0c;映射基于键来存储数据。映射功能强大的地方是&#xff0c;能够基于键快速检索数据。键就像索引一样&#xff0c;指向与该键关联的值。与C、Java中的映射的不同之处在于…