文章
· 4 hr 前 阅读大约需 4 分钟

控制好 IRISTEMP:阻止它侵占你的存储空间

 

您检查了服务器,发现IRISTEMP 增长过快。不必惊慌。让我们在存储空间耗尽之前调查一下这个问题

步骤 1:确认 IRISTEMP 增长问题

在假设 IRISTEMP 是问题所在之前,让我们先检查一下它的实际大小。

检查可用空间

IRIS 终端运行以下命令:

%SYS>do ^%FREECNT

出现提示时,输入

Database directory to show free space for (*=All)? /<your_iris_directory>/mgr/iristemp/

如果输出结果显示可用空间非常小,则IRISTEMP 正在像拥挤的壁橱一样占满您的存储空间。但是,如果可用空间没有问题,但 IRISTEMP 数据库文件 (IRIS.DAT) 仍然很大(这可能就是你来这里的原因),这意味着临时数据已经被清理。在这种情况下,你的任务就是密切关注,按照下面的步骤在下一次行动中抓住它,并恢复宝贵的空间。

第 2 步:确定 IRISTEMP 的用途

运行 ^%GSIZE 查找大型全局文件

%SYS>do ^%GSIZE

按照提示操作:

Directory name: /<your_iris_dir>/mgr/iristemp/

All Globals? No => yes

33 items selected from
33 available globals

1) Get exact packing details
2) Get block counts only
3) Use fast stochastic estimate

Please select an option:  3 => 3

输出示例:

        Global              Blocks          Bytes Used Packing
      ----------- ---------------- ------------------- -------
      IRIS.Temp.Ensemble
                                1                  60      1 %
      IRIS.Temp.MARIO
                               50             360,960     88 %
      IRIS.Temp.RecompileInfo
                                1                  84      1 %

如果看到不熟悉的内容,特别是与 ISC 或 SQL 有关的内容,可能是 SQL 查询占用了太多空间。请与应用程序开发人员联系,了解这些查询在做什么,是否可以优化。有时,添加索引或删除不必要的 ORDER BY 子句就能带来很大的不同。

步骤 3:检查进程私有全局(PPG)

某些进程可能无法正常释放进程私有全局(Process-Private Global,PPG)。运行:

%SYS>DO ^GETPPGINFO

输出示例:

%SYS> DO ^GETPPGINFO("*")
Process ID: 303 --> Total PPG Block count 10840
  ^||%t uses 10838 blocks (maxblock #1926355)
  ^||TempQuery uses 2 blocks (maxblock #115489)
  Highest block #: 1926355
Process ID: 33456 --> Total PPG Block count 45343
  ^||MARIOtest uses 45343 blocks (maxblock #1927313)
  Highest block #: 1927313

如果某个进程使用了大量PPG 空间,它可能会卡住或无法按预期运行。您应该与应用程序开发人员一起进行调查,以确定 PPG 是否已知,以及代码中是否存在故障。同样,如果 PPG 是未知的,而且看起来像 InterSystems 内部代码(例如 ^||%t),则最好打开 WRC 支持案例寻求帮助。

通过阅读官方文档,成为 GETPPGINFO 的专家。

第 4 步:解决问题

选项 1:停止进程

一旦确定了正在消耗 IRISTEMP 的进程,如果你知道它在做什么并认为它是安全的,你可以使用系统管理门户(System Management Portal)或终端来杀死它。通过终端,可以找到该任务并终止它

%SYS>do ^JOBEXAM

查找工作编号并运行:

%SYS>DO ^RESJOB
 
Force a process to quit InterSystems IRIS
 
Process ID (? for status report): 7732

Process ID (? for status report):
 
%SYS>

⚠️只有在了解进程并确定安全的情况下才能停止进程!

选项 2:重启 IRISTEMP 并设置限制

清除 IRISTEMP,请停止 Iris,删除其 IRIS.DAT 文件并重新启动:

iris stop <instance_name>
rm /<iris_directory>/mgr/iristemp/IRIS.DAT
iris start <instance_name>

要在启动时重置 IRISTEMP 并将空间归还操作系统,可在 IRIS 配置中设置一个限制:

[Startup]
MaxIRISTempSizeAtStart=5000

更多详情,请参阅有关MaxIRISTempSizeAtStart 的官方文档。如果不这样做,IRISTemp 将清空,但会保持其臃肿的大小!为了更好地控制,可以考虑将 IRISTEMP 迁移到专用卷,或在 SMP 中设置最大 DB 大小。此外,社区中还有其他文章提供更多详细信息:如何缩小 IRISTEMP

方案 3:旧版本?升级!

如果您运行的是旧版本的 Iris,请升级!例如,我记得我们在 2021.1.1+ 中修复了一个错误,即 IrisTemp 可能会不受控制地增长。升级并使用最新的维护版本是避免已知错误的最好方法。

总结:控制 IRISTEMP

通过以下步骤,您可以

✅ 使用^%GSIZE^GETPPGINFO查找正在使用 IRISTEMP 的进程
✅ 停止占用过多 PPG空间的已知进程
✅ 通过设置限制或重新创建 IrisTemp 数据库来恢复空间

升级!始终建议这样做!

这样可以控制 IRISTEMP,避免存储问题

讨论 (0)1
登录或注册以继续