作为我们应用程序的一部分,我们使用 Jackrabbit (1.6.4) 来存储文档。我们的应用程序检索到的每个文档都被放入 Jackrabbit 中的文件夹结构中,如果不存在则创建该文件夹结构。
我们的 DBA 注意到以下查询对持有 Jackrabbit 模式的 Oracle (11.2.0.2.0) 数据库执行了很多 - 每小时超过 50000 次,导致数据库上的大量 IO。事实上,它是经过时间的 IO(97% IO)方面排名前 5 位的 SQL 语句之一:
select BUNDLE_DATA from VERSION_BUNDLE where NODE_ID = :1
查看数据库,您会注意到该表最初只包含一条记录,包括node_id
(数据类型 RAW)键和DEADBEEFFACEBABECAFEBABECAFEBABE
值,然后是bundle_data
BLOB 列中的几个字节。稍后,将添加更多记录以及其他数据。
该表的 SQL 如下所示:
CREATE TABLE "VERSION_BUNDLE"
(
"NODE_ID" RAW(16) NOT NULL ENABLE,
"BUNDLE_DATA" BLOB NOT NULL ENABLE
);
我有以下问题:
- 为什么 Jackrabbit 如此频繁地访问此表?
- 任何 Jackrabbit 调整选项可以使这更快吗?
- Jackrabbit 是否完全更改了该
BUNDLE_DATA
值,还是仅在每次访问存储库时读取该值? - 有没有办法调整数据库模式以使其更好地处理这种情况?
更新:该表最初仅包含一条记录,随着时间的推移添加更多记录,由 Jackrabbit 内部决定。在大多数情况下,访问似乎仍然是只读的,因为插入或更新语句未报告为以高数量运行。