您检查了服务器,发现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,避免存储问题。




