在我的网站上,我在一个简单的 mysql 表中记录每个综合浏览量(日期、IP、引用、页面等)。
该表具有以下活动:
SELECT每分钟1个DELETE每分钟1个UPDATE查询INSERTS(大约每秒 300 个)。该表永远不会大于 200MB。
今天,我将这个表从 InnoDB 表更改为 MEMORY 表,这对我来说是有意义的,以防止不必要的硬盘 IO。我还每分钟修剪一次这张桌子,以确保它永远不会变得太大。而且这个信息不是很重要,所以在 MySQL 重启时删除它并不重要。
——
性能方面,一切都运行良好。但是我注意到在运行 tuning-primer 时,使用 MEMORY 表时我的当前锁定等待率非常高。
Current Lock Wait ratio = 1 : 561
Run Code Online (Sandbox Code Playgroud)
如果我将此表更改为 InnoDB,则比率为:
Current Lock Wait ratio = 0 : 78600946
Run Code Online (Sandbox Code Playgroud)
我的问题:我应该担心这个锁定等待率吗?有什么我可以改变我的配置来改进的东西,以便使用 MEMORY 表的锁定等待率不会那么高?
我开始在我的生产站点上遇到一些问题,当有一个网页需要加载一个非常大的 ResultSet(目前来自关系数据库,MySQL)时,它需要永远,而且这些结果集只会越来越大。
我开始寻求更好的解决方案,我遇到的是将数据保存在 NoSQL 数据库中的想法。(我已经在使用 Mongo,但由于我的环境中存在大量 DML,Mongo 效率低下。)因此,在网上搜索时,我考虑了以下 2 个选项:
当查看以上两个时,我可以说两者都是基于 JSON 文档的(好吧,这是一个好的开始),但是当进入一些技术背景时,我确实在寻找更好的缓存(我不想杀死我的服务器的 I/O)然后是 MongoDB 的主-主复制能力(我看到 CouchDB 可以根据源->目标/目标->源轻松复制)。
有人可以向我提供您的一些意见,如果您尝试过上述解决方案,我将很高兴听到您的经验。
使用 SQL Server 2008 R2,供应商数据库中的主事务表与所有其他表相比非常庞大,大约有 14 个索引。其中一些索引不会在我们的环境中使用,但我们无法删除它们。这不是问题,这只是我们必须忍受的事情。
我的问题是为什么这些低读取或无读取索引中的一些似乎正在使用内存 - 比同一个大表上经常使用的其他索引更多。我原以为大部分缓冲区缓存都会用于频繁读取的对象。这些索引上发生的唯一事情是写开销。
例如,这些低读取索引中的一个分配了大约 2 GB 的内存(索引总大小的 58%),另一个分配了 1.7 GB 的内存(其大小的 27%)。同时,规模庞大且使用良好的聚集索引本身只有 4 个演出(其大小的 2%)。具有大量读取的不同 NC 索引在缓冲区缓存中只有 100 MB(其大小的 5%)。
查看物理统计数据,我可以看到碎片非常糟糕。从该表上的所有写入和非顺序插入可以理解这一点。不过,我不确定它是否与内存使用有关。
查看这些索引的操作统计数据也很有趣。
我意识到这是一个抽象的问题,我没有提供很多实际的统计数据。我只是好奇 SQL Server 如何做出这些缓冲区缓存使用决策,并想知道是否有人理解它。
我最近发现,一台服务器安装了 32 位 SQL Server 2012 而不是 64 位,现在它的内存不足。
我可以让这个 32 位安装使用锁定页面使用更多内存吗?
我对此知之甚少。我已经阅读了这个http://support.microsoft.com/kb/2659143/en-us位我仍然不清楚这是否有帮助,需要做什么等
我最近为一个繁忙的网站迁移了一个 100GB 的数据库:
MS SQL 2008 Standard Edition R2
Windows Server 2008
48gb RAM
Run Code Online (Sandbox Code Playgroud)
到
MS SQL 2012 Web Edition
Windows Server 2012
64gb RAM
Run Code Online (Sandbox Code Playgroud)
我注意到 2012 年的内存使用情况似乎有所不同,与2008 年服务器相比,工作集内存相对较低(请参见下面的屏幕截图)。
题
这看起来正确吗,我应该担心吗?我想确保 MSSQL 可以根据需要访问尽可能多的内存。两台服务器的使用配置文件,就来自它们所支持的网站的请求而言,是相同的,因此查询的模式或数量没有改变。
SQL Server 2008

SQL Server 2012

SQL Server 2008 内存设置

SQL Server 2012 内存设置

感谢您提供任何提示。
在 SQL Server 中,我通常将最大服务器内存设置设置为流行的最佳实践之一,例如保留 10% 或 4GB,以较高者为准。
http://www.brentozar.com/archive/2012/11/how-to-set-sql-server-max-memory-for-vmware/
我有一台带有 64GB RAM 的新服务器。由于许可限制,此服务器必须运行 SQL Server 数据库引擎、SSIS 和 SSAS。SSIS ETL 发生在一夜之间,用户主要在白天访问实际数据库。在这种情况下,是否最好保留默认设置,以便 SSIS 可以在需要时占用内存,然后数据库引擎可以在需要时占用内存?
有一个本地 SQL Server 2012 实例。一旦内存减少到关键的 128 MB,然后我就停止了。
我无法启动它(想法:内存不足)。
是否可以在配置文件或系统注册表中增加此限制?
我们有一个服务器,在 2 个 NUMA 上有 8 个 CPU,并启用了超线程。当前 Maxdop 设置为 8,但实际上应该按照本文的 Maxdop 部分设置为 4:
https://support.microsoft.com/en-us/kb/322385
所以我们需要把它改成4。
但是我的问题是将 maxdop 设置为 8 有什么影响?那么并行跨越两个 NUMAS 吗?我问的原因是我们刚刚遇到了一个奇怪的问题,查询返回非常慢,而 PLE 迅速下降。
即使没有针对 SQL 运行,PLE 也没有改进。CXPACKET 等待类型上升。然后突然 CXPACKET 等待类型完全下降,PLE 开始上升,现在已经恢复正常。
在这段时间里,对数据库执行了小查询,但并不是一个查询完成导致 CXPACKET 等待类型下降而 PLE 再次上升的情况 - 我们不知道是什么原因造成的。
一个可能的解释是 MAXDOP 设置不正确。
谁能向我解释跨 NUMA 节点并行执行的影响,是否与使用外部内存时耗尽工作线程和更慢的访问时间相同?
谢谢
从最近两天开始,我可以在 SQL Server 错误日志中看到以下内容。
AppDomain 2 (mssqlsystemresource.dbo[runtime].1) unloaded.
&
AppDomain 2 (mssqlsystemresource.dbo[runtime].1) is marked for unload due to memory pressure.
Run Code Online (Sandbox Code Playgroud)
我有这样的系统环境:
OS- microosft windows server 2012 R2 Standard
processors - Intel(R) Xeon(R) CPU E5-2670 0 @2.60 GHz
Installed Memory (RAM) - 8GB
Hardware Information - VMWare, Inc. VMware Virtual Platform
SQL Server - Microsoft SQL Server Enterprise (64-bit)
Run Code Online (Sandbox Code Playgroud)
我已经在本地服务器中查看了昨天的事件日志。我找到了这些事件
Server Name ID Severity Source Log Date and Time
ABC 1008 Error Microsoft-Windows-Perflib Application 10/01/2015 2:21
ABC 2 Error TeamCentral Application …Run Code Online (Sandbox Code Playgroud) 我运行了sp_Blitz,它指出了一个内存问题,说:
Memory Dangerously Low 服务器有 32755 MB 的物理内存,但只有 235 MB 可用。由于服务器内存不足,因此存在交换到磁盘的危险,这会降低性能。
服务器有32 GB RAM总,0-2 MB FreeRAM, 200 - 2376 Mb Available。
@@版本:Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) 2012 年 6 月 28 日 08:36:30 版权所有 (c) Microsoft Corporation Enterprise Edition(64 位),Windows NT 6.1(内部版本 7601:Service Pack) 1)
我看了一会儿性能计数器,看到了以下值:
Page Faults/s _Total ~ 1.200 Average, Max 18.000, regular Peeks up to 1500.
Page Faults/s sqlserver ~ 380 Average, Max 1600, regular Peeks …Run Code Online (Sandbox Code Playgroud) memory ×10
sql-server ×6
buffer-pool ×1
cache ×1
couchbase ×1
couchdb ×1
innodb ×1
installation ×1
maxdop ×1
mysql ×1
nosql ×1
numa ×1
optimization ×1
performance ×1
sp-blitz ×1
sql-clr ×1