所以我在一个不错的非营利组织开始了一份新工作,该组织已经存在了几十年。它们有各种各样的 SQL Server 版本(例如:2005 Express 到 2016 SP2 Enterprise)并跨越许多 Windows VM(从 2003 到 2016 的任何版本)。
以前的 DBA 没有完成关于公司拥有的许可证数量或版本的任何文档。实际上没有有用的记录。
我已经运行MAP 工具包来收集有关 SQL Server 的详细信息。因此,至少我已经对存在哪些服务器有了一个起点,并且我已经深入研究了哪些服务器仍在提供生产数据。
我还使用了新的ApexSQL Discover工具,结果好坏参半(对不起,我喜欢你的东西,但当我需要添加 1 个服务器时,我不能等 3 天让这个工具运行)。还有dbatools find-dbainstance(不是使用 PS 导出大量数据的忠实粉丝)。因此,通过将所有这些拼凑起来,我现在相当确定我已经发现了该域中曾经存在的大部分或全部实例。
当然,我已经通过多种方式查询了许可,并彻底检查了完全无用的非常有用的 MS SQL 许可指南,其中似乎没有提供有关组织拥有的许可证或如何获取它的任何信息。
问题的症结在于:其中一些许可证是在十年(或两年)前购买的。有些肯定是纸质发票。还记得我提到过这是一个非营利组织吗?从好的方面来说,许可很便宜。另一方面,许可很便宜,因此大多数或所有许可都没有 SA,因为购买新的更便宜。编辑:这是当时不购买 SA 的原因,我没有参与。
我是否应该假设,因为很可能没有人拥有 SA——服务器也可能获得适当的许可——并根据需要购买新的?这似乎是一种可怕的方法。
我的问题:
我怎么知道我的新公司拥有哪些 SQL Server 许可证而不尝试挖掘 2004 年的纸质发票?我以前从未遇到过这种情况。是我接受审计或支付合作伙伴审计费用的唯一选择吗?(如果是这样,微软你在做什么 bb??)。
dba.se 可以在这里提供的任何见解都可能会使我的生活更上一层楼。谢谢大家!
我在我们的一台生产服务器上的 SQL Server 内存缓存中看到了一些令人担忧的行为。我们使用的是 SQL Server 2014 SP2 企业版,16 核,400GB RAM(300GB 专用于 SQL Server)。
使用此查询(归功于Glenn Berry):
SELECT TOP(10) mc.[type] AS [Memory Clerk Type],
CAST((SUM(mc.pages_kb)/1024.0) AS DECIMAL (15,2)) AS [Memory Usage (MB)]
FROM sys.dm_os_memory_clerks AS mc WITH (NOLOCK)
GROUP BY mc.[type]
ORDER BY SUM(mc.pages_kb) DESC OPTION (RECOMPILE);
Run Code Online (Sandbox Code Playgroud)
我发现了一个问题。这些USERSTORE_TOKENPERM
值增长到似乎超过缓存的程度,因此,几乎所有计划都被编译并且没有被缓存。也就是说CACHESTORE_SQLCP
,CACHESTORE_OBJCP
每个大约 200 MB,而USERSTORE_TOKENPERM
缓存高达 11 GB。存储了超过 168,000 个令牌,大约有 100 个并发/600 个用户,连接数为 3000-5000。这些数字似乎相差甚远。
不幸的是,提供此应用程序的供应商没有“系统要求”文档之类的疯狂内容,并且他们不会承诺在未经测试的 Service Pack/CU 上支持该应用程序。所以我的手被束缚在 SQL Server 2014 SP2 上,因为我读过的其他线程建议升级到 SQL Server …
在下面的示例查询中,我正确地按小时计算计数,但我需要它返回一天中的所有小时,并为没有数据的小时显示 0。有没有一种简单的方法可以让我做到这一点?
这是我的 SQL:
IF OBJECT_ID(N'tempdb..#Temp') IS NOT NULL DROP TABLE #Temp;
CREATE TABLE #Temp (TempNumber NVARCHAR(50),TempDateTime DATETIME2)
INSERT INTO #Temp (TempNumber, TempDateTime)
VALUES ('11287233600','2019-08-20 08:27:08.047')
INSERT INTO #Temp (TempNumber, TempDateTime)
VALUES ('11287233601','2019-08-20 08:32:08.047')
INSERT INTO #Temp (TempNumber, TempDateTime)
VALUES ('11287233602','2019-08-20 10:27:08.047')
INSERT INTO #Temp (TempNumber, TempDateTime)
VALUES ('11287233603','2019-08-20 12:27:08.047')
INSERT INTO #Temp (TempNumber, TempDateTime)
VALUES ('11287233604','2019-08-20 16:27:08.047')
INSERT INTO #Temp (TempNumber, TempDateTime)
VALUES ('11287233605','2019-08-20 23:27:08.047')
SELECT DATEPART(hh,TempDateTime) AS TempDatePart,
COUNT(DISTINCT TempNumber) AS RecordCount
FROM #Temp
GROUP BY DATEPART(hh, TempDateTime) …
Run Code Online (Sandbox Code Playgroud)