回复:JIRA 4.1.2。是什么让这个查询调用?

Re: JIRA 4.1.2. What makes this query call?

我们使用的是不受支持的 JIRA 版本,即使我们有支持许可证,Atlassian 也不会就此主题向我们提供支持。

我们的数据库在过去一周发布了一个补丁,我们看到系统上的查询数量从每天 80 万跃升至超过 3600 万。 JIRA 系统正在尝试从组中删除用户。以下是我们的 EnterpriseDB 日志捕获的内容

"execute <unnamed>: DELETE FROM public.membershipbase WHERE USER_NAME= AND GROUP_NAME="

我们根本不明白为什么它会尝试这样做,如果您能帮助我们找出造成这种情况的原因,我们将不胜感激。我检查了我们拥有的所有代码,检查了数据库中的所有函数,查找了存储过程,甚至查看了所有视图。我没有看到任何可以进行上述调用的东西。如果您对这个版本的 JIRA 有任何经验,请提供您可能有的任何建议。从我读到的内容来看,从 5.0 版开始,USERBASE 和 MEMBERSHIPBASE 表已被删除,这就是为什么我要求那些具有 4.1.2 知识的人。

正如您所指出的,membershipbase table 包含属于 JIRA 内部组的用户。我最好的猜测是,您可能将 JIRA 设置为使用 LDAP/AD 进行身份验证(使用 Crowd?),并且它正在尝试将组成员身份的更改同步到 JIRA。

例如,如果 JIRA 配置了一个过于宽泛的 LDAP 过滤器,用于包含大型公司中的邮件列表等的组,而另一个公司管理员要删除 and/or 移动一堆过滤器外的 LDAP 树中的条目,我可以看到这导致 JIRA 中发生大量删除。

一个对 运行 有用的命令是这个(根据你上面的评论,我想你需要向你的 dBAs 请求):

SELECT GROUP_NAME, count(1) FROM public.membershipbase GROUP BY GROUP_NAME ORDER BY 1 DESC

这会报告每个组中的用户数。然后 运行 一分钟后再次执行相同的命令,并比较输出。这应该让您知道哪些组正在被修改,而不必安装 SQL 监控工具。 (您可能还想查看 JIRA 中总共有多少组,并验证它看起来是否合理。)

无论哪种方式,您都可以深入了解 updated/deleted 的实际用户,并开始询问其他系统管理员。

您也可以尝试重新启动 JIRA 以查看更新是否消失。如果它是 legitimate/intended LDAP 同步操作,我想 DELETEs 会很快重新启动。

编辑添加:

代替 SQL 查询,Group Browser in the admin UI 也会向您显示一些相同的信息,尽管它不是特别适合比较。

创建查询的项目中实现了名为 opensymphony 的库包。

人们为什么不自己学习编写 SQL。 IMO 更干净、更简单。

解决方法是将编码为 100,000 的用户缓存中的 1000 个条目的限制更改为 100,000。

我说这是黑客修复,因为我们不理解编码内容的意图。代码中没有注释,也没有任何文档说明为什么将其设置为如此低的数字。

Updated: 9/17/2015 After speaking with a trainer for Jira 6.x they said that this issue was not Jira based. Someone had modified the source code. Jira 4.x has no such limiter of 1000 for caching.