Sql server 2012 Umbraco查询问题

Sql server 2012 Umbraco查询问题,sql-server-2012,umbraco,umbraco6,Sql Server 2012,Umbraco,Umbraco6,我在开发服务器win2k8 32位SQLServer2012 express iis7.5上有一个运行umbraco 6.1.6的现有站点,所有工作正常。我已将该站点移植到live server这是win2k12 iis8 sql server 2012。该端口包括对文件进行FTP、从dev获取db备份以及在live上进行恢复。问题是在现场时,去媒体部分我没有媒体。在检查日志文件并运行sql profiler之后,我已经确定了导致问题的查询。同样的查询在dev上运行正常,但在live上需要11分

我在开发服务器win2k8 32位SQLServer2012 express iis7.5上有一个运行umbraco 6.1.6的现有站点,所有工作正常。我已将该站点移植到live server这是win2k12 iis8 sql server 2012。该端口包括对文件进行FTP、从dev获取db备份以及在live上进行恢复。问题是在现场时,去媒体部分我没有媒体。在检查日志文件并运行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问题

问候


伊斯梅尔

我以前也有同样的问题,没有显示媒体项目,这与我的脏数据库有关。如果我要清理回收站,而您无法在Umbraco用户界面上进行清理,则需要使用以下查询将其删除:

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

我以前也遇到过不显示媒体项的问题,这与我的脏数据库有关。如果我要清理回收站,而您无法在Umbraco用户界面上进行清理,则需要使用以下查询将其删除:

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

我最初会将其视为数据库问题,而不是Umbraco问题。听起来Sql Server优化器可能与live Server上的数据结构不符。因此,当您尝试加载媒体部分()时,我会运行一个SQL探查器,然后查看什么花费的时间太长。例如,如果优化器的表结构错误,它会认为某些表非常小,因此会对它们进行完整的表扫描以将其放入内存中,但如果它们恰好非常大,那么此表扫描将导致查询出现巨大的延迟,而查询在不同的服务器上运行良好。修复此问题可以像删除和重新创建所有表索引一样简单且无损

如果您的应用程序存在您认为可能存在的性能问题 由于一个特别长时间运行的查询,您可以使用 用于分析查询持续时间的SQLProfilerTSQL_持续时间模板。你可以 可以交互分析查询,也可以保存信息 到输出文件并脱机分析数据


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

我最初会将其视为数据库问题,而不是Umbraco问题。听起来Sql Server优化器可能与live Server上的数据结构不符。因此,当您尝试加载媒体部分()时,我会运行一个SQL探查器,然后查看什么花费的时间太长。例如,如果优化器的表结构错误,它会认为某些表非常小,因此会对它们进行完整的表扫描以将其放入内存中,但如果它们恰好非常大,那么此表扫描将导致查询出现巨大的延迟,而查询在不同的服务器上运行良好。修复此问题可以像删除和重新创建所有表索引一样简单且无损

如果您的应用程序存在您认为可能存在的性能问题 由于一个特别长时间运行的查询,您可以使用 用于分析查询持续时间的SQLProfilerTSQL_持续时间模板。你可以 可以交互分析查询,也可以保存信息 到输出文件并脱机分析数据


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

正确解决了此问题。在我的网站上,我更新了iis应用程序池以启用32位,它不仅将我的回忆录使用率从99%降低到了70%,而且还修复了媒体负载问题


伊斯梅尔解决了这个问题。在我的网站上,我更新了iis应用程序池以启用32位,它不仅将我的回忆录使用率从99%降低到了70%,而且还修复了媒体负载问题


Ismail

Amir,谢谢你的建议,但仍然无法加载媒体部分。Amir,谢谢你的建议,但仍然无法加载媒体部分。amelvin,非常感谢你的建议有没有快速删除和重新创建数据库中所有索引的方法?没问题,找到一些东西可以让它试试看是否解决了问题。amelvin,非常感谢你的建议,有没有快速删除和重新创建数据库中所有索引的方法?没问题,找到一些东西会让你试试看是否解决了这个问题。