我们在具有100+ Gb RAM的服务器上有一个带有50Gb SQL 2012数据库的客户端站点.
在使用应用程序时,SQL服务器可以很好地将数据库缓存到内存中,但是缓存的性能提高是在第二次运行查询时发生的,而不是第一次.
为了在第一次运行查询时尝试最大化缓存命中,我们编写了一个proc,它遍历整个数据库中每个表的每个索引,运行以下命令:
SELECT * INTO #Cache
FROM ' + @tablename + ' WITH (INDEX (' + @indexname + '))'
Run Code Online (Sandbox Code Playgroud)
为了尽可能多的数据,试图强迫一个大的,丑陋的,人为的阅读.我们计划每15分钟运行一次,它总体上做得很好.
在没有讨论其他瓶颈,硬件规格,查询计划或查询优化的情况下,是否有人对如何完成同样的任务有更好的想法?
更新
感谢您的建议.删除了"INTO #Cache".经过测试,它对填充缓冲区没有任何影响.
补充:我只选择索引中的键,而不是选择*.这(显然)更为重要,速度更快.
补充:读取和缓存约束索引.
这是当前的代码:(希望它对其他人有用)
CREATE VIEW _IndexView
as
-- Easy way to access sysobject and sysindex data
SELECT
so.name as tablename,
si.name as indexname,
CASE si.indid WHEN 1 THEN 1 ELSE 0 END as isClustered,
CASE WHEN (si.status & 2)<>0 then 1 else 0 end as isUnique,
dbo._GetIndexKeys(so.name, si.indid) as Keys,
CONVERT(bit,CASE …
Run Code Online (Sandbox Code Playgroud) 我已经获得了一个早期的圣诞礼物:
允许走出开发周期来重新组织和记录我们的应用程序.
我完全可以自由地重组,重构和设置我认为合适的任何数量的基础设施.
如果你有全权委托,那么你的"完美".NET开发环境是什么?
关于应用程序:
VB.NET客户端 - 服务器应用程序.(Windows Forms前端,ASPX Webservices后端)
目前正在使用Visual Studio和SQL Server 2003以及... Visual SourceSafe.
我希望有一些组合:
*更好的版本控制.(倾向于Subversion)
*Wiki或其他系统进行错误跟踪和文档编制.(倾向于使用Subversion Trac)
*简化构建过程和每日构建(Visual Build?CruiseControl.NET?)
*SQL Server数据库的版本控制
*升级到Visual Studio 2005(或2008)?
...对于一个由5个左右的开发人员组成的小团队
在SQL Server中回滚事务后有哪些可用选项?
我想在有人删除10,000行错误之前制定一个计划.
我们在仅运行SQL Server 2005的专用盒子上运行我们的应用程序数据库.这个DB服务器有32 Gb的RAM ...而数据库文件本身只有6 Gb.
我想强制几个重读/查询表进入SQL内存缓冲区以提高速度.
我知道SQL服务器非常适合在从磁盘读取数据后将必要的数据保存在内存中......但是我们的客户可能更喜欢他们的查询在第一时间快速运行." 第二次最快的表现"并不是产品亮点.
缺少旧的"Pin Table"DBCC命令..有什么想法吗?
我编写了一个"CacheTableToSQLMemory"Proc,它循环遍历所有表的索引(Clustered&Non),在Temp表中执行"Select*".我已经安排SQL Agent每15分钟运行一次"缓存大量表",试图将页面保留在内存中.
它在很大程度上工作..但即使在我缓存了所有查询的相关表之后,运行查询仍然增加了该表的缓存页数.然后它第二次更快.想法?
我们正在运行PAE和AWE.SQL设置为使用8到20 GB的RAM.
我正在使用DotNetZip库来压缩Zip文件中的数据流以进行存储.DotNetZip能够压缩多线程,并且它很好而且速度快.
我发现的所有库都是单螺纹减压.
这是ZIP格式的一般缺点吗?.Net世界中是否有多线程解压缩功能?(使用Stream界面?)
如果没有..是否有技术原因导致无法实施?
附加信息:正在压缩的数据是SQL Server数据库备份~30 Gb,从SQL Server备份命令(VDI)通过ZipOutputStream流式传输到FileStream.