Questions tagged «memory»

当在数据库环境中使用时,内存是指CPU可以直接寻址的RAM,而不是通过I / O子系统。

5
为什么我不使用SQL Server选项“针对临时工作负载进行优化”?
我一直在阅读有关Kimberly Tripp的一些有关SQL Server计划缓存的精彩文章,例如:http : //www.sqlskills.com/blogs/kimberly/plan-cache-and-optimizing-for-adhoc-workloads/ 为什么甚至有“针对临时工作负载进行优化”的选项?这不应该一直都在吗?无论开发人员是否在使用即席SQL,为什么不在每个支持它的实例(SQL 2008+)上都启用此选项,从而减少缓存膨胀?

3
SQL Server的“总服务器内存”消耗停滞了数月,而可用空间增加了64GB以上
我遇到了一个奇怪的问题,即SQL Server 2016 Standard Edition 64位似乎已经限制了为其分配的总内存的正好一半(128 GB的64GB)。 输出@@VERSION为: Microsoft SQL Server 2016(SP1-CU7-GDR)(KB4057119)-13.0.4466.4(X64)2017年12月22日11:25:00版权所有(c)Windows Server 2012 R2 Datacenter 6.3上的Microsoft Corporation标准版(64位)(内部版本9600:)(管理程序) 输出sys.dm_os_process_memory为: 当我查询时sys.dm_os_performance_counters,我看到Target Server Memory (KB)处的131072000,Total Server Memory (KB)位于处的一半65308016。在大多数情况下,我认为这是正常现象,因为SQL Server尚未确定它需要为其自身分配更多的内存。 但是,它已经“卡住”了〜64GB,已经超过2个月了。在此时间段内,我们对某些数据库执行了大量内存密集型操作,并向实例添加了近40个数据库。我们共有292个数据库,每个数据库都有4GB的预分配数据文件(自动增长速率为256MB)和2GB的日志文件的自动增长速率为128MB。我每晚晚上12:00执行一次完整备份,并从星期一到星期五从6:00 AM到8:00 PM(每15分钟间隔)开始事务日志备份。这些数据库的整体吞吐量相对较低,但是我怀疑SQL Server尚未爬到Target Server Memory 很自然地会通过添加新数据库,正常查询执行以及已运行的占用大量内存的ETL管道来实现。 SQL Server实例本身位于虚拟化(VMware)Windows Server 2012R2服务器之上,该服务器具有12个CPU,144GB内存(128GB到SQL Server,16GB预留给Windows)以及总共4个虚拟磁盘,这些虚拟磁盘位于具有15K SAS驱动器的vSAN之上。Windows自然位于64GB C:磁盘上,页面文件为32GB。数据文件位于2TB D:磁盘上,日志文件位于2TB L:磁盘之上,而tempdb位于256GB T:磁盘上,其中8x16GB文件没有自动增长。 我已验证除之外,服务器上没有其他SQL Server实例在运行MSSQLSERVER。 该服务器完全专用于SQL Server实例,因此我们没有在其上运行的其他任何可能消耗内存的应用程序或服务。 我利用RedGate SQL …

4
在专用数据库服务器上,要为操作系统保留多少内存?
假设您有专门用于数据库功能的专用服务器- 您应该为操作系统保留多少内存? 我意识到这可能会有所不同,具体取决于特定的OS,特定的数据库软件等。但是,由于内存对数据库性能非常重要,因此我希望数据库具有最大合理的内存级别,而又不会使主机OS饿死。 所以 首先有什么好的经验法则? 我们应该查看哪些计数器或性能指标来确定我们是否走得太远并且数据库是否因某种原因使主机操作系统处于饥饿状态?

5
为什么SQL Server消耗更多的服务器内存?
SQL Server占用了我的服务器RAM的87.5%。最近,这引起了许多性能瓶颈,例如速度缓慢。我研究了这个问题。我可以在互联网上找到的一种常见解决方案是设置SQL Server的最大限制。这样做已经取得了很大的进步。我想知道为什么如果未设置最大内存值,为什么SQL Server会继续消耗资源



4
为大量ram调整postgresql
我有两个相同的服务器(就硬件而言),它们都是Windows Server 2008 R2的标准安装,并且安装的软件最少(基本上是我的代码和必需的东西,例如jvm等)。 在一台服务器上,我在第二台服务器postgresql 9.1上运行sql server 2005。这两个服务器在性能方面的差异是惊人的,在postgresql上是如此糟糕,以至于我对老板最初的“让我们使用postgresql而不是为sql server许可付费”感到遗憾。对于同一条命令,我们说的是30秒与15分钟之间的差异,这不仅是一个命令,而且是我向其抛出的任何查询或命令。它们都具有几乎相同的数据(以不同的顺序插入记录),并且两个数据库都具有完全相同的结构/索引等。 但我希望这只是性能调整的问题。问题是,sql server几乎在服务器上使用了所有32 gig的ram,而postgresl却什么也不用,绝对少于gig,尽管我实际上还没有弄清楚。 我如何让postgresql使用20多个演出的Ram?这些服务器是专门为此数据库材料构建的,因此,我认为数据库和支持过程未使用的所有内存都是浪费的。

3
MongoDB使用太多内存
我们已经使用MongoDB已有几周了,我们看到的总体趋势是mongodb使用了太多的内存(远远超过了其数据集+索引的总大小)。 我已经阅读了这个问题和这个问题,但是似乎没有一个解决我所面临的问题,他们实际上是在解释文档中已经解释的内容。 以下是htop和show dbs命令的结果。 我知道mongodb使用内存映射的IO,因此基本上OS会处理内存中的缓存内容,并且从理论上讲,当另一个进程请求可用内存时,mongodb 应该释放其缓存的内存,但是从我们的观察来看,它不是。 OOM开始杀死其他重要进程,例如postgres,redis等。(可以看到,为解决此问题,我们将RAM增加到183GB,现在可以使用,但价格昂贵。mongo使用了约87GB的ram,几乎是整个数据集大小的4倍) 所以, 这样的内存使用量真的是正常的吗?(根据文档,WiredTiger最多将〜60%的RAM用于其缓存,但是考虑到数据集的大小,它甚至没有足够的数据量来占用86GB的RAM吗?) 即使预期内存使用量,在另一个进程开始请求更多内存的情况下,mongo为什么也不会放开分配的内存?在我们增加RAM并使系统完全不稳定之前,Linux oom不断将各种其他正在运行的进程(包括mongodb本身)杀死。 谢谢 !

7
为什么不能在MySQL中使用MEMORY存储引擎的原因是什么?
最近,我发现MySQL具有一个我不知道的“内存”引擎(我的大部分数据库工作是针对业余项目的,因此我会随时了解自己的需求)。看来此选项应该可以大大提高我的性能,所以我想知道它是否有任何缺点。我知道的两个是: 我需要有足够的RAM来容纳有问题的表。 如果机器关闭,表将丢失。 我认为#1应该不是问题,因为我正在使用AWS EC2,并且可以根据需要移到具有更多内存的实例类型。我相信我可以通过根据需要转储回磁盘来减轻#2的压力。 还有什么其他问题?内存引擎能否提供比MyISAM或InnoDB更差的性能?我认为我读到的东西与此引擎的索引不同;这是我需要担心的事情吗?

3
Windows 2008R2上SQL 2008R2的建议页面文件大小
此Microsoft文章- 如何确定64位版本的Windows Server 2008和/或Windows 2008 R2的适当页面文件大小,提供了计算64位Windows 2008和Windows 2008R2的页面文件大小的指南。毫无疑问,这对于通用服务器来说效果很好。我想知道针对在Windows 2008 / R2 64位上运行的SQL Server 2008R2的指导是什么? 我假设我们希望内存中的数据少到页面文件,否则SQL可能两次在磁盘上打数据。SQL Server甚至允许内存中的数据访问页面文件吗?我已经通过SQL Server 2008 R2联机丛书寻求指导,但是还没有提到页面文件的使用。 这是一个潜在的使用场景:给具有64GB RAM的物理服务器,整个64GB RAM是否需要页面文件?我们是否应该为96GB的页面文件做好准备?对于单个文件,这似乎有点过分。我知道传统的看法是Windows会将页面文件耦合到内存,以尝试在RAM上更容易地换出应用程序,但这是真的吗?小于64GB的页面文件会在此处影响性能吗?


1
为什么SQL Server 2012 Express在服务器上使用9.5GB的RAM?
我正在构建一个计划将SQL Server 2012 Express嵌入为主要数据存储的应用程序。在我的开发机(带有3GB RAM的Win7-32​​)上进行测试时,我从未观察到该sqlservr.exe进程使用超过1GB的RAM,正如我从发布的SQL Server Express版的硬件扩展限制中所期望的那样。 然后,我将应用程序移动到服务器级计算机(具有16GB RAM的Win Server 2008R2 64位)上以评估其性能,并惊讶地发现该sqlservr.exe过程迅速扩展到大约9.5GB RAM并停留在那里。 我重新启动了几次,以查看是否有效果,但是每次,该过程迅速恢复到约9.5GB。现在,我当然很高兴SQL Server Express使用我的RAM,但是我想知道这是否是预期的行为,这样我就不会再依赖基于不正确的RAM使用情况的性能级别了。 仅供参考,根据我的说法SELECT @@VERSION,服务器计算机上SQL Server的版本为: Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Oct 19 2012 13:38:57 Copyright (c) Microsoft Corporation Express Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) 我的9.5GB号码来自任务管理器中的“私人工作集”号码。来自DBCC memorystatus(尽管在现在处于空闲状态的服务器上)输出的第一张表如下: …

3
CPU利用率是否会影响外部NUMA访问的成本?
情境 假设我有一个带有4个套接字的SQL Server,每个套接字有1个NUMA节点。每个插槽具有4个物理核心。总内存为512 GB,因此每个NUMA节点均具有128 GB的RAM。 密钥表被加载到第一个NUMA节点中。 题 假设我们从该表读取了大量流量。如果拥有NUMA节点的套接字的所有物理核心都具有100%的CPU利用率,这是否会对来自其他套接字的非本地NUMA访问的成本产生负面影响?或者,另一方面,无论本地套接字有多忙,非本地NUMA访问的成本都是多少? 我希望我的问题有道理。请让我知道是否可以尝试澄清。 背景 上周我们的生产服务器中发生数据库问题,某些业务处理似乎受到了更大的影响。我们进行的查询几乎没有逻辑读取,但需要超过1分钟的时间。我们查看的总体CPU利用率约为60%。我们没有查看特定于套接字的CPU指标。I / O指标是平均值。

1
SQL Server-是否有人使用SUMA,跟踪标志8048或跟踪标志8015?
最近包括SQL Server启动跟踪标记8048,以解决SQL Server 2008 R2系统中的严重自旋锁争用问题。 希望听到其他人发现使用情况的情况,其中使用情况是通过跟踪标志8048(将查询内存授予策略从每个NUMA节点升级到每个核),跟踪标志8015(SQL Server忽略物理NUMA)或SUMA(交错访问足够均匀的内存(在某些NUMA计算机上为BIOS选项)。 跟踪标记8048 http://blogs.msdn.com/b/psssql/archive/2011/09/01/sql-server-2008-2008-r2-on-newer-machines-with-more-than-8-cpus每个数字节点可能需要跟踪标志-8048.aspx 跟踪标记8015 http://blogs.msdn.com/b/psssql/archive/2010/04/02/how-it-works-soft-numa-io-completion-thread-lazy-writer-workers-and-memory -nodes.aspx 详细的系统工作负载,从出现问题的系统收集的指标以及在干预后从系统收集的指标。 跟踪标志8048是一个“修复程序”,但这是最好的修复程序吗?由于跟踪标志8015,SQL Server忽略物理NUMA会完成相同的事情吗?如何将BIOS设置为交错内存,使服务器具有模仿SMP的SUMA行为而不是NUMA行为? 和平!tw:@sql_handle 关于系统:-4个六核Xeon E7540 @ 2.00GHz,超线程-128 GB RAM-WS2008R2-MSSQL 2008 R2 SP2-maxdop 6 关于工作负载:-由2个报表应用程序服务器驱动的1000个批处理计划/排队报表。-3种批次:每天,每周,每月-与SQL Server的所有报表应用程序服务器连接均作为单个服务帐户进行-报表并发最大数= 90 故障系统的主要发现:-从Perfmon开始,间隔为15秒--系统保持95%-100%的CPU繁忙--SQL Server缓冲区页面查找<10000次/秒 从等待和自旋锁DMV开始,间隔5分钟 高CMEMTHREAD服务员和等待时间 SOS_SUSPEND_QUEUE高旋转和后退 鲍勃·多尔(Bob Dorr)在跟踪标记8048上的CSS工程师博客文章中指出,由于查询内存授予的瓶颈,每个NUMA节点具有8个以上内核的系统可能会遇到类似的症状。跟踪标志8048会将策略更改为每个核心而不是每个NUMA节点。 干预 使用-T8048重新启动MSSQL。区别立即显而易见:缓冲区页面查找率上升到100万以上,每秒达到800万。麻烦的批处理工作负载以前不到24小时就无法完成,而不到4小时就可以完成。提交了不是调查或干预重点的另一批工作量,作为验证跟踪标志8048的校正值的一部分(并确保其不必要的副作用最小)。该报告批处理先前在2小时内完成;带有跟踪标记8048的报告批处理大约在20分钟内完成。 每晚ETL也遇到了好处。ETL时间从大约60分钟减少到40分钟。 从多个地方收集信息,我推测报告排队的程度很高,并发报告计数大于硬件线程计数,并且所有用户的单一用户帐户组合在一起给一个NUMA节点施加了压力,直到工作线程压力导致它对于同一个用户帐户的下一个传入连接请求不利,此时下一个NUMA节点将立即获得一定数量的连接。每个NUMA节点最终都有很大可能强调查询内存授予瓶颈。 为查询内存授权打开更多通道消除了瓶颈。但是,我不确定费用。鲍伯·多尔(Bob Dorr)的CSS帖子清楚地表明,带有跟踪标志8048的其他内存开销。单页分配器区域内的开销是否受MSSQL 2008 R2最大服务器内存控制?如果是这样,我猜想系统在缓冲池缓存中将只少一些数据库页面。如果没有,应该降低最大服务器内存来容纳吗?

1
计划缓存大小和保留内存
当运行包括实际执行计划在内的查询时,根运算符(SELECT)告诉我缓存计划大小为32KB。 该连接的查询sys.dm_exec_cached_plans和sys.dm_os_memory_objects,看问题的计划,称该值pages_in_bytes和max_pages_in_bytes为32768(32KB),它匹配缓存计划的大小。 我不明白的是sys.dm_exec_cached_plans.size_in_bytes49152(48KB)中的值代表什么。我已经在所有这些专栏中阅读了BOL,尤其是size_in_bytes这样说: “ 缓存对象消耗的字节数。 ” 我无法理解难题的最后一部分,以了解其真正含义。 我知道所有运算符(不是在谈论用于排序和散列的额外内存授予)都需要一定数量的固定内存来存储状态,进行计算等,这些内存与优化后的计划一起存储在缓存中,但是在哪里? 因此,我的问题是: 到底是size_in_bytes什么意思 为什么它的值比“缓存的计划大小”高? 为所有操作员/迭代器保留的固定内存量是哪里,是使用“缓存的计划大小”(在我的示例中为32Kb)还是其他任何地方? 我知道它们是具有不同功能的不同DMV,但它们是相关的。在编译(缓存)计划sys.dm_exec_cached_plans加入sys.dm_os_memory_objects在memory_object_address列。我在此处发布问题的原因是,我正在寻求帮助,了解如何解释DMV及其列。 如果size_in_bytes是缓存的计划大小,为什么SQL Server在实际执行计划中说另一个值? 新查询,新数字: 实际计划 缓存的计划大小16KB 编译内存96KB DMV: sys.dm_exec_cached_plans.size_in_bytes 24KB sys.dm_os_memory_objects.pages_in_bytes, .max_pages_in_bytes 16KB。 另外,请注意,此查询不需要任何其他内存授予即可进行排序和哈希操作。 Microsoft SQL Server 2012-11.0.5343.0(X64)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.