Umbraco查询问题

时间:2014-03-07 15:04:07

标签: sql-server-2012 umbraco umbraco6

我在dev服务器上有现有站点win2k8 32bit sqlserver 2012快递iis7.5运行umbraco 6.1.6一切正常。我已将该站点移植到实时服务器这是win2k12 iis8 sql server 2012.该端口涉及对文件进行整理并从开发中获取数据库备份并在实时恢复。问题出在媒体部分的现场,我没有媒体。检查日志文件并运行sql profiler后,我确定了导致问​​题的查询。 dev上的相同查询运行正常,但在实时需要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问题吗?

此致

伊斯梅尔

3 个答案:

答案 0 :(得分:3)

正确解决了这个问题。在我的网站上,我更新了iis应用程序池以启用32位,它不仅将我的记忆用法从99%降低到70%,还修复了媒体加载问题。

Ismail

答案 1 :(得分: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

答案 2 :(得分:1)

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

  

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

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

相关问题