1

我在运行 umbraco 6.1.6 的开发服务器 win2k8 32bit sqlserver 2012 express iis7.5 上有现有站点,一切正常。我已将该站点移植到实时服务器,这是 win2k12 iis8 sql server 2012。该端口涉及对文件进行 ftp 处理并从开发人员获取数据库备份并在线恢复。当去媒体部分我没有媒体时,这个问题正在直播。检查日志文件并运行 sql profiler 后,我确定了导致问​​题的查询。dev 上的相同查询运行良好,但 live 需要 11 分钟。

查询看起来像

SELECT umbracoNode.id, umbracoNode.trashed, umbracoNode.parentID, 
        umbracoNode.nodeUser, umbracoNode.level, umbracoNode.path, umbracoNode.sortOrder, 
        umbracoNode.uniqueID, umbracoNode.text, umbracoNode.nodeObjectType, 
        umbracoNode.createDate, 
        COUNT(parent.parentID) as children, published.versionId as publishedVerison, 
        latest.versionId as newestVersion, contenttype.alias, 
        contenttype.icon, contenttype.thumbnail, 
        property.dataNvarchar as umbracoFile, 
        property.controlId
        FROM umbracoNode umbracoNode
        LEFT JOIN umbracoNode parent ON parent.parentID = umbracoNode.id
        INNER JOIN cmsContent content ON content.nodeId = umbracoNode.id
        LEFT JOIN cmsContentType contenttype ON contenttype.nodeId = content.contentType
        LEFT JOIN (SELECT nodeId, versionId FROM cmsDocument WHERE published = 1 GROUP BY nodeId, versionId) as published
        ON umbracoNode.id = published.nodeId
        LEFT JOIN (SELECT nodeId, versionId FROM cmsDocument WHERE newest = 1 GROUP BY nodeId, versionId) as latest ON umbracoNode.id = latest.nodeId
        LEFT JOIN (SELECT contentNodeId, versionId, dataNvarchar, controlId FROM cmsPropertyData INNER JOIN umbracoNode ON cmsPropertyData.contentNodeId = umbracoNode.id 
        INNER JOIN cmsPropertyType ON cmsPropertyType.id = cmsPropertyData.propertytypeid 
        INNER JOIN cmsDataType ON cmsPropertyType.dataTypeId = cmsDataType.nodeId 
        WHERE umbracoNode.nodeObjectType = 'B796F64C-1F99-4FFB-B886-4BF4BC011A9C'
        AND [umbracoNode].[parentID] = -1) as property
        ON umbracoNode.id = property.contentNodeId
        WHERE (umbracoNode.nodeObjectType = 'b796f64c-1f99-4ffb-b886-4bf4bc011a9c')
        AND ([umbracoNode].[parentID] = -1)
        GROUP BY umbracoNode.id, umbracoNode.trashed, umbracoNode.parentID, umbracoNode.nodeUser, umbracoNode.level, umbracoNode.path, umbracoNode.sortOrder, umbracoNode.uniqueID, umbracoNode.text, 
        umbracoNode.nodeObjectType, umbracoNode.createDate, published.versionId, latest.versionId, contenttype.alias, contenttype.icon, contenttype.thumbnail, property.dataNvarchar, property.controlId
        ORDER BY umbracoNode.sortOrder

它存在相同的数据库索引,所以我看不到发生了什么。有没有人见过这个?是 64 位 w2k12 上的 sql server 2012 问题吗?

问候

伊斯梅尔

4

3 回答 3

3

正确解决了这个问题。在我的站点中,我更新了 iis 应用程序池以启用 32 位,它不仅将我的内存使用率从 99% 降低到 70%,它还修复了媒体负载问题。

伊斯梅尔

于 2014-03-17T10:49:36.450 回答
1

我之前没有显示媒体项目也有同样的问题,这与我的脏数据库有关。如果我要清理回收站并且您无法在 Umbraco UI 上执行此操作,则需要使用以下查询删除它们:

DECLARE @nodeId int

SET @nodeId = 0

SELECT id INTO #nodes FROM umbracoNode WHERE (path like '%-21%' AND id != -21 AND @nodeId = 0) OR (id = @nodeId)

SELECT COUNT(*) FROM #nodes

-- Pulled from Umbraco.Core.Persistence.Repositories.GetDeleteClauses()
DELETE FROM umbracoUser2NodeNotify WHERE nodeId IN (SELECT id FROM #nodes)
DELETE FROM umbracoUser2NodePermission WHERE nodeId IN (SELECT id FROM #nodes)
DELETE FROM umbracoRelation WHERE parentId IN (SELECT id FROM #nodes)
DELETE FROM umbracoRelation WHERE childId IN (SELECT id FROM #nodes)
DELETE FROM cmsTagRelationship WHERE nodeId IN (SELECT id FROM #nodes)
DELETE FROM umbracoDomains WHERE domainRootStructureID IN (SELECT id FROM #nodes)
DELETE FROM cmsDocument WHERE NodeId IN (SELECT id FROM #nodes)
DELETE FROM cmsPropertyData WHERE contentNodeId IN (SELECT id FROM #nodes)
DELETE FROM cmsPreviewXml WHERE nodeId IN (SELECT id FROM #nodes)
DELETE FROM cmsContentVersion WHERE ContentId IN (SELECT id FROM #nodes)
DELETE FROM cmsContentXml WHERE nodeID IN (SELECT id FROM #nodes)
DELETE FROM cmsContent WHERE NodeId IN (SELECT id FROM #nodes)
--ALTER TABLE umbracoNode NOCHECK CONSTRAINT FK_umbracoNode_umbracoNode_id --Hopefully not needed
DELETE FROM umbracoNode WHERE id IN (SELECT id FROM #nodes)
--ALTER TABLE umbracoNode CHECK CONSTRAINT FK_umbracoNode_umbracoNode_id
DROP TABLE #nodes
于 2014-03-12T14:45:44.590 回答
1

我最初会将其视为数据库问题而不是 Umbraco 问题。听起来 Sql Server 优化器可能与您的实时服务器上的数据结构一致。因此,当您尝试加载媒体部分 ( http://msdn.microsoft.com/en-us/library/ff650699.aspx ) 时,我会运行 SQL 探查器,然后查看花费的时间太长。例如,如果优化器的表结构错误,它会认为某些表非常小,因此会对它们进行全表扫描以将它们放入内存 - 但如果它们恰好非常大,那么此表扫描将导致在不同服务器上运行良好的查询存在巨大滞后。解决这个问题可以像删除和重新创建所有表索引一样简单且非破坏性。

如果您的应用程序存在您认为可能是由特别长时间运行的查询引起的性能问题,您可以使用 SQLProfilerTSQL_Duration 模板来分析查询持续时间。您可以交互式地分析查询,也可以将信息保存到输出文件并离线分析数据。

另一种选择是,当我扩展后台但使用了未正确序列化的类时,我看到节点结构拒绝在后台呈现;因为如果您以不可序列化的方式扩展了媒体后台(这并不容易!),Umbraco 会尝试将内容序列化回 XML,那么这可能会导致页面无法呈现。不知道为什么这会与您的其他环境不同。

于 2014-03-14T11:55:43.543 回答