YAFLogo

cschear
  • cschear
  • 61.4% (Friendly)
  • YAF Camper Topic Starter
14 years ago
I have noticed some slow loading times when upgrading our forum. The main source seems to be yaf_forum_moderators. Anyone else experiencing this?

33 sql queries (43.788 seconds, 92.02%).

[dbo].[yaf_prov_getuser]: 0.013

[dbo].[yaf_forum_moderators]: 36.814

[dbo].[yaf_category_list]: 0.000

...

Running 1.9.5.5 Beta (Build 4580) with ~24k users.

Sponsor
driftnetnz
12 years ago
I'm experiencing this now

yaf_forum_moderators taking >40s

~30k users

driftnetnz
12 years ago
actually I'm still on 1.9.4, can't upgrade easily here due to server access.

I modified yaf_forum_moderators to restrict the views before union and brought the time down from ~45s to < 1s as below:


select
		ForumID = a.ForumID, 
		ModeratorID = a.GroupID, 
		ModeratorName = b.Name,
		IsGroup=1
	from
		[dbo].[yaf_ForumAccess] a WITH(NOLOCK)
		INNER JOIN [dbo].[yaf_Group] b WITH(NOLOCK) ON b.GroupID = a.GroupID
		INNER JOIN [dbo].[yaf_AccessMask] c WITH(NOLOCK) ON c.AccessMaskID = a.AccessMaskID
	where
		(b.Flags & 1)=0 and
		(c.Flags & 64)<>0
	union all
	select 
		ForumID = access.ForumID, 
		ModeratorID = usr.UserID, 
		ModeratorName = usr.Name,
		IsGroup=0
	from
		[dbo].[yaf_User] usr WITH(NOLOCK)
		INNER JOIN (		
			select
				UserID				= a.UserID,
				ForumID				= x.ForumID,
				ModeratorAccess		= MAX(ModeratorAccess)
			from
				(
				SELECT     UserID, ForumID, MAX(ReadAccess) AS ReadAccess, MAX(PostAccess) AS PostAccess, MAX(ReplyAccess) AS ReplyAccess, MAX(PriorityAccess) AS PriorityAccess, 
							MAX(PollAccess) AS PollAccess, MAX(VoteAccess) AS VoteAccess, MAX(ModeratorAccess) AS ModeratorAccess, MAX(EditAccess) AS EditAccess, MAX(DeleteAccess) 
				AS DeleteAccess, MAX(UploadAccess) AS UploadAccess, MAX(DownloadAccess) AS DownloadAccess, MAX(AdminGroup) AS AdminGroup
				FROM         
				(
				SELECT     UserID, ForumID, ReadAccess, PostAccess, ReplyAccess, PriorityAccess, PollAccess, VoteAccess, ModeratorAccess, EditAccess, DeleteAccess, 
											  UploadAccess, DownloadAccess, AdminGroup
				FROM          dbo.yaf_vaccess_user AS b where ModeratorAccess <> 0 AND AdminGroup = 0
				UNION ALL
				SELECT     UserID, ForumID, ReadAccess, PostAccess, ReplyAccess, PriorityAccess, PollAccess, VoteAccess, ModeratorAccess, EditAccess, DeleteAccess, 
											 UploadAccess, DownloadAccess, AdminGroup
				FROM         dbo.yaf_vaccess_group AS b where ModeratorAccess <> 0 AND AdminGroup = 0
				UNION ALL
				SELECT     UserID, ForumID, ReadAccess, PostAccess, ReplyAccess, PriorityAccess, PollAccess, VoteAccess, ModeratorAccess, EditAccess, DeleteAccess, 
											 UploadAccess, DownloadAccess, AdminGroup
				FROM         dbo.yaf_vaccess_null AS b where ModeratorAccess <> 0 AND AdminGroup = 0
				) AS access
				GROUP BY UserID, ForumID
			) as x 		
				INNER JOIN [dbo].[yaf_UserGroup] a WITH(NOLOCK) on a.UserID=x.UserID
				INNER JOIN [dbo].[yaf_Group] b WITH(NOLOCK) on b.GroupID=a.GroupID
			WHERE 
				ModeratorAccess <> 0 AND x.AdminGroup = 0
			GROUP BY a.UserId, x.ForumID
		) access ON usr.UserID = access.UserID
	where
		access.ModeratorAccess<>0
	order by
		IsGroup desc,
		ModeratorName asc

bbobb
  • bbobb
  • 100% (Exalted)
  • YAF Developer
12 years ago
No need to draw all the stuff.

SELECT UserID, ForumID, ReadAccess, PostAccess, ReplyAccess, PriorityAccess, PollAccess, VoteAccess, ModeratorAccess, EditAccess, DeleteAccess,

UploadAccess, DownloadAccess, AdminGroup

FROM dbo.yaf_vaccess_user AS b where ModeratorAccess <> 0

Simply wipe out it from the replacement queries like this

SELECT UserID, ForumID, ModeratorAccess, AdminGroup

FROM dbo.yaf_vaccess_user AS b where ModeratorAccess <> 0

I would try to replace views inside the blob too.