跳转到内容
技术文章
作者的资料照片Sr万博新体育手机客户端i Krishna Chaitanya Kuppili

NSE实施经验

NSE实施经验

**所有的截图都是我从我们的一个HANA实现中截取的。

作品简介:

NSE是HANA数据库上的一个功能齐全的暖数据存储,我们可以利用它来移动访问频率较低的数据,而无需完全加载到内存中。

这是一个非常好的特性,我们可以避免增加服务器容量,从而控制硬件成本。

例如,我们的一个客户在Azure上有一个2TB的生产实例,他们的平均内存消耗为1.7-1.8 TB。为了增加硬件容量,保持相似的CPU大小,我们需要一个更大的VM,大约4TB,根据当前数据库的增长速度,这是超大的;所以客户最终会为更大的虚拟机支付更多的钱,即使它没有被充分利用。

例如,Azure的定价如下所示。

为了保持虚拟机大小相同并控制内存使用,我们有以下选项。

  1. 通过存档来减小数据库大小——这是与数据库类型无关的标准程序之一,但是,这需要考虑保留策略要求,以满足客户的审计需求。
  2. 数据老化-数据老化是另一个很好的特性,但它在逆转老化方面有一定的局限性,采用自定义代码来访问老化的数据。
  3. NSE - NSE是SAP为HANA DB提供的一个非常有用的产品,它涵盖了老化和归档的缺点。NSE可以很容易地反转,不需要采用自定义代码。
  4. 考虑到成本,我们还没有探索扩展节点。

因此,我们选择NSE作为减少数据库内存占用的选项。

实施前分析:

在开始实现NSE之前,我们需要确定可以移动到NSE并从内存中卸载的潜在表。

为了找出表的列表,我们需要定义挑选表的标准。首选的标准是,卸载有大量更改的表,如insert, delete, update等,但很少有read。另外,作为最佳实践,我们决定将业务关键表排除在此练习之外。

我们可以使用下面的方法找出满足上述条件的表。

  1. ST10表呼叫统计
  2. HANA SQL HANA_Tables_TableStatistics_1.00.100+
  3. 按记忆排列的排行榜
  4. 分析了无顾问

根据SAP的定义,NSE Advisor是一个确定数据温度的工具,并使用基于规则的(数据温度阈值、访问模式/频率、数据密度)算法来得出这些建议,特别是将热对象和热对象确定为可页面加载或可列加载的候选对象。

NSE Advisor需要在生产系统中运行几天,以捕获表调用统计信息并提供建议。这可能会导致数据库的开销,但是我们没有注意到CPU/内存消耗的显著增加,所以我们激活了NSE Advisor。

另请注意,NSE Advisor涵盖了启用它期间的活动。它可能不考虑某些表被访问/不被访问的时间段,当它关闭时。然而,如果你已经涵盖了关键的时间段,这是一个合理的估计。

除了NSE advisor,使用顶级表列表来支持和证明您的发现。

请注意:请在生产激活之前,在质量系统中检查HANA数据库的资源消耗,以了解影响。要监视的关键指标是DB CPU, DB内存使用情况,HANA线程使用情况,作业运行时等。

激活NSE Advisor

ALTER SYSTEM ALTER CONFIGURATION (' indexserver.ini ', ' SYSTEM ') SET (' cs_access_statistics ', ' collection_enabled ') = ' true '

重新配置;

这将用默认设置激活NSE。我们可以将NSE Advisor配置为关注大于特定大小的表,以避免结果集中的噪声。

NSE Advisor附加配置参数:

MIN_OBJECT_SIZE:控制所考虑对象的最小对象大小(BYTE)

为推荐

修改配置(' indexserver.ini ', ' SYSTEM '

(' cs_nse_advisor ', ' min_object_size ') = ' YYY '

重新配置;

-default value 1048576 = 1 MiB

将YYY替换为以字节为单位的数字以固定最小对象大小。

HOT_OBJECT_THRESHOLD_PERCENT:按行控制表的百分比

扫描计数和大小,计算热物体阈值时要考虑

COLD_OBJECT_THRESHOLD_PERCENT:按行控制表的百分比

扫描计数和大小,计算冷对象阈值时要考虑

修改配置(' indexserver.ini ', ' SYSTEM '

(' cs_nse_advisor ', ' hot_object_threshold_rel ') = ' YY '

重新配置;-默认值10

修改配置(' indexserver.ini ', ' SYSTEM '

(' cs_nse_advisor ', ' cold_object_threshold_rel ') = ' YY '

重新配置;-默认值10

注意:HOT_OBJECT_THRESHOLD_PERCENT和COLD_OBJECT_THRESHOLD_PERCENT的和

不能超过100。

一旦NSE Advisor被激活,我们可以允许它运行几周,覆盖大部分用户活动期间。

运行几周后,使用下面的SQL语句将其关闭:

修改配置(' indexserver.ini ', ' SYSTEM '

(' cs_access_statistics ', ' collection_enabled ') = ' false '

重新配置;

使用查询检查NSE Advisor的建议:

从m_cs_nse_advisor中选择*

NSE Advisor结果:

在检查NSE Advisor结果后,我们决定将以下表移到PAGE LOADABLE以从内存中卸载。

  1. ZARIX*存档信息系统表
  2. CDHDR / CDPOS
  3. EDIDC / edid

这使我们节省了250GB的空间,并有可能节省约500GB的空间。

实现

作为第一步,我们将ZARIX*表移动到PAGE LOADABLE。

修改表sapabap1。Zarixbc1页可加载级联

修改表sapabap1。Zarixbc2页可加载级联

修改表sapabap1。Zarixbc3页可加载级联

在监视缓冲区缓存一周之后,我们将Change Documents表移动到PAGE LOADABLE。

在迁移到PAGE LOADABLE之前,我们决定利用分区的优势,将所有旧的历史数据移动到PAGE LOADABLE,并在内存中只保留CURRENT分区。

因此,我们基于UDATE和CHANGENR划分了CDHDR/CDPOS。

修改表sapabap1。CDHDR分区

范围(UDATE)

(分区' 20170101 ' <= values < ' 20180101 ',

分区“20180101”<= values < ' 20190101 ',

分区“20190101”<= values < ' 20200101 ',

分区“20200101”<= values < ' 20210101 ',

分区“20210101”<= values < ' 20220101 ',

其他分区

))

修改表sapabap1。CDPOS

分区的

范围(CHANGENR) ((

分区“0000000000”<= values < ' 0010000000 ',

分区“0010000000”<= values < ' 0050000000 ',

分区“0050000000”<= values < ' 0100000000 ',

分区“0100000000”<= values < ' 0200000000 ',

分区“0200000000”<= values < ' 0300000000 ',

分区“0300000000”<= values < ' 0400000000 ',

分区“0400000000”<= values < ' 0500000000 ',

分区“0500000000”<= values < ' 0600000000 ',

分区“0600000000”<= values < ' 0700000000 ',

分区“0700000000”<= values < ' 0800000000 ',

分区“0800000000”<= values < ' 0900000000 ',

分区“0900000000”<= values < ' 1000000000 ',

划分他人))

分区可能会根据表的大小花费时间,可以使用下面的SQL查询来查找进度。

SELECT * from M_JOB_PROGRESS

在分区时,请记住对数据库的性能影响,如果已经配置了解决方案管理器,请继续监视来自解决方案管理器的警报。

在分区过程中,我们收到了以下警告,但由于分区是在低活动期间完成的,因此对性能没有严重影响。但是,建议有一个监视设置。

  1. HANA内存占用率-业务内存占用率
  2. MVCC版本
  3. 被阻止交易的百分比
  4. 长时间运行的未提交写事务

分区之后,将历史分区移动到PAGE LOADABLE。

语句“ALTER TABLE SAPABAP1.”修改分区1页面可加载

successfully executed in 1:08.042 minutes(服务器处理时间:1:07.851 minutes) - Rows Affected: 0

语句“ALTER TABLE SAPABAP1.”CDHDR修改分区2页面可加载

successfully executed in 1:08.998 minutes(服务器处理时间:1:08.811 minutes) - Rows Affected: 0

语句“ALTER TABLE SAPABAP1.”CDHDR修改分区3页面可加载

successfully executed in 1:12.009 minutes(服务器处理时间:1:11.830 minutes) - Rows Affected: 0

语句“ALTER TABLE SAPABAP1.”CDHDR修改分区4页可加载

successfully executed in 1:04.275 minutes(服务器处理时间:1:04.094 minutes) - Rows Affected: 0

语句“ALTER TABLE SAPABAP1.”CDPOSALTER PARTITION 1 PAGE LOADABLE’

successfully executed in 3.513秒(服务器处理时间为3.238秒)- Rows Affected: 0

语句“ALTER TABLE SAPABAP1.”CDPOSALTER PARTITION 2 PAGE LOADABLE’

successfully executed in 2:19.986 minutes(服务器处理时间:2:19.805 minutes) - Rows Affected: 0

语句“ALTER TABLE SAPABAP1.”CDPOSALTER PARTITION 3 PAGE LOADABLE’

successfully executed in 2:14.751 minutes(服务器处理时间:2:14.573 minutes) - Rows Affected: 0

语句“ALTER TABLE SAPABAP1.”CDPOSALTER PARTITION 4 PAGE LOADABLE’

successfully executed in 4:12.651 minutes(服务器处理时间:4:12.475 minutes) - Rows Affected: 0

语句“ALTER TABLE SAPABAP1.”CDPOSALTER PARTITION 5 PAGE LOADABLE’

successfully executed in 4:56.709 minutes(服务器处理时间:4:56.533 minutes) - Rows Affected: 0

语句“ALTER TABLE SAPABAP1.”CDPOSALTER PARTITION 6 PAGE LOADABLE’

successfully executed in 7:26.954 minutes(服务器处理时间:7:26.776 minutes) - Rows Affected: 0

语句“ALTER TABLE SAPABAP1.”CDPOSALTER PARTITION 7 PAGE LOADABLE’

successfully executed in 7:12.293 minutes(服务器处理时间:7:12.116 minutes) - Rows Affected: 0

语句“ALTER TABLE SAPABAP1.”CDPOSALTER PARTITION 8 PAGE LOADABLE’

successfully executed in 9:15.744 minutes(服务器处理时间:9:15.566 minutes) - Rows Affected: 0

语句“ALTER TABLE SAPABAP1.”CDPOSALTER PARTITION 9 PAGE LOADABLE’

successfully executed in 17:31.126 minutes(服务器处理时间:17:30.949 minutes) - Rows Affected: 0

Buffer Cache大小:

由于缓冲区缓存是在访问时保存PAGES的关键因素,因此需要适当地调整它的大小。

如果您将缓冲区缓存保持得太高,那么它大部分都没有使用。

如果将缓冲区缓存保持得太小,就会发生缓冲区溢出事件并创建短转储。

默认情况下,Buffer Cache的大小为GAL的10%,我们可以使用下面的参数进行自定义。

indexserver.ini -> [buffer_cache_cs] -> max_size:最大缓存大小(以MB为单位)

indexserver.ini -> [buffer_cache_cs] -> max_size_rel:相对于GAL的最大缓冲缓存大小

作为NSE实现活动的一部分,我们卸载了180GB的表,并将初始缓冲区缓存大小保持为100MB,这对于开始来说太低了,但在测试时保持这样。

我们要求我们的主数据团队加载一些主数据,他们观察到以下简短的转储。

我们将缓冲区缓存大小增加到10GB,我们没有收到任何转储。

缓冲区缓存需要被监控,以审查命中率,缓冲区重用计数等

可以使用以下方法监控Buffer Cache:

从m_buffer_cache_statistics中选择*

结果:

在将几个表移动到PAGE LOADABLE之后,我们看到HANA内存使用量减少了大约240GB,考虑到数据库的大小,这是一个相当大的数量。

重要SAP笔记

3123259 - SAP HANA本地存储扩展2.0 SPS 06功能限制

2927591 - SAP HANA本地存储扩展2.0 SPS 05功能限制

常见问题:SAP HANA本地存储扩展(NSE)

指定的标签

      第一个留下评论
      你一定是登录评论:评论或回复一篇文章