Questions tagged «sql-server»

所有版本的Microsoft SQL Server(非MySQL)。还请添加特定于版本的标记,例如sql-server-2016,因为它通常与问题相关。

4
仅在CPU空闲时才按计划运行服务器代理作业
我在SQL Server代理中设置了一个作业来运行更新查询。我希望这项工作在每晚午夜至凌晨5点之间执行,并且希望在该时间范围内每5分钟重复一次。但是我只希望作业在CPU空闲时才能实际执行,也就是说CPU利用率低于20%。我知道我可以设置时间表,也可以单独设置CPU空闲要求。我是否可以设置它,以便两个“时间表”都必须正确才能运行作业? 谢谢

3
在SQL Server Management Studio中的标题中显示表名称
有谁知道如何获取SQL Server Management Studio在标题中显示表名称。现在它们几乎没用了,每次我需要查看一张桌子时,我都必须重新打开它。 在过去的美好时光里,我曾经习惯于使用Enterprise Manager,这非常有用。 我在这里找到了Brent Ozars的文章,并且在Options ...中的相应条目似乎没有什么用处。也许是第三方产品?

5
列出所有数据库上所有表的表大小
是否有一种简单的方法可以列出MSSQL服务器上每个数据库中每个表的大小? 我已经在sys.tables上使用查询来获取单个数据库的结果,但是每个服务器上有100个以上的数据库,因此对于所有数据库而言,获取相同结果的方法将是不错的选择。 目前,我必须从master.sys.databases创建一个临时数据库列表,然后使用游标对其进行迭代,构建查询并将结果插入到temp表中EXEC sp_executeSQL @SQLString。

3
“当连接关闭并返回到池时,保留来自最后一个SET TRANSACTION ISOLATION LEVEL语句的隔离级别”?
MSDN在线文章“ SQL Server中的快照隔离 ”指出: “隔离级别具有连接范围的范围,并且一旦使用SET TRANSACTION ISOLATION LEVEL语句设置了连接,它将一直有效,直到关闭连接或设置另一个隔离级别为止。当关闭连接并返回到池中时,则保留了最后一个SET TRANSACTION ISOLATION LEVEL语句的隔离级别。后续重用池化连接的连接将使用在池化连接时生效的隔离级别。” 这是不矛盾的段落(“直到”还是“保留”)? 然后,如果在关闭连接并将其返回到池之后,“ 保留了与最后一个SET TRANSACTION ISOLATION LEVEL语句的隔离级别”,则应如何理解: 默认隔离级别将具有任意值(池中的不同连接将具有不同的隔离级别,并且其值将取决于重新打开的连接)? 还是池中所有连接的所有默认值都将更改为最后一个?但是又是未知数吗?

1
UserDB选择结果的特定TempDB插入将SOS_SCHEDULER_YIELD中的结果转换为ENCRYPTION_SCAN
我们的其中一个生产系统出现了一个问题,即从我们的用户数据库向临时表插入一条插入语句。当我注释掉插入/选择时,有问题的存储过程会及时运行,因此我对问题的隔离很有信心。 当我取消注释有问题的插入/选择时,调用的一系列存储过程基本上停止了。在tempdb或我们的任何用户数据库中,我看不到“按年龄划分的热门交易”中的任何内容。当数据库处于“静止”状态时,我看不到活动监视器中有任何偏离活动监视器信息的东西,除了CPU的平坦度约为20%。 行为如下:当我设置然后执行重现情况时,到达有问题的插入/选择时,我看到一个SOS_SCHEDULER_YIELD并有一个ENCRYPTION_SCAN。大约五个小时后,我将看到对存储过程的处理恢复并且该活动将完成(我在每个不同的操作周围放入了快速且肮脏的日志语句)。 我还用执行时的值替换了插入的选择部分中的变量,并运行选择查询本身,并在五秒钟内将其返回。 有问题的用户数据库的加密启用值为FALSE,tempdb也是如此。有问题的操作发生在大约65k行数据上,我仅用1k行进行了尝试,并且这种行为仍然存在,尽管花费的时间要少得多。 单个用户数据库是此行为的唯一实例。我已经通过该用户数据库的备份在本地复制了它。我们还有大约70个该软件的其他用户没有出现此问题。 鉴于上述信息,我的问题是,为什么我们的存储过程停止处理?由于可能希望获得一个准确的答案,因此调试此错误的正确步骤是什么?DMV之一中可能有某些东西,例如dm_tran_locks,dm_exec_requests,dm_tran_database_transactions,dm_os_schedulers,dm_exec_sessions,尽管它们为我提供了一些信息,但我并没有以指向解决方案的方式来解释或理解输出。 以下是有问题的插入/选择: INSERT INTO #TS_EVENT_DATA ( EVENT_FK, EVENT_TYPE_CR_FK, EVENT_ENTITY_CLASS_CR_FK, userDatabase_ID, DATA_NAME_FK, IMPORT_JOB_FK, PRODUCT_STRUCTURE_FK, ORG_ENTITY_STRUCTURE_FK, ENTITY_CLASS_CR_FK, ENTITY_DATA_NAME_FK, ENTITY_STRUCTURE_FK, DATA_SET_FK, DATA_TYPE_CR_FK, ORG_IND, TABLE_NAME, NET_VALUE1_NEW, NET_VALUE2_NEW, NET_VALUE3_NEW, NET_VALUE4_NEW, NET_VALUE5_NEW, NET_VALUE6_NEW, NET_VALUE1_CUR, NET_VALUE2_CUR, NET_VALUE3_CUR, NET_VALUE4_CUR, NET_VALUE5_CUR, NET_VALUE6_CUR, PERCENT_CHANGE1, PERCENT_CHANGE2, PERCENT_CHANGE3, PERCENT_CHANGE4, PERCENT_CHANGE5, PERCENT_CHANGE6, VALUE_UOM_CODE_FK, ASSOC_UOM_CODE_FK, VALUES_SHEET_NAME, UOM_CONVERSION_FACTOR, END_DATE_CUR, …

3
如何将MySQL链接服务器添加到SQL Server?
我正在尝试将SQL Server上的链接服务器添加到MySQL Server。 请注意,SQL Server安装在具有不同域名的单独计算机上。 SQL Server 10.0.1.1在old_domain.com上。 MySQL服务器10.0.1.2位于new_domain.com上。 我在服务器上添加了ODBC数据源,10.0.1.1并测试了连接,未报告任何问题。 然后,我打开Microsoft SQL Server Management Studio并导航到SQL SERVER > Server Object > Linked Servers。 我进入向导以添加链接服务器,并按如下方式进行配置: 链接服务器:“ MySQLNewServer” 我选择了“其他数据源”提供程序“用于ODBC的Microsoft OLE DB提供程序”产品名称“与MySQL的连接”数据源“ MySQL”与第一步中添加的数据源名称相同。 在“安全性”选项卡上,选择“使用此安全性上下文进行访问”,然后输入SQL Server用户名和SQL Server密码。 我打“确定” 注意:我遵循此链接上的说明http://dbperf.wordpress.com/2010/07/22/link-mysql-to-ms-sql-server2008/ 但是,我收到此错误: 链接服务器“ MySQLNewServer”的OLE DB Providor“ MSDASQL”返回消息“ [MySQL] [ODBC 5.2(w)驱动程序]无法连接到10.0.1.1(10055)上的MySQL服务器Microsoft SQL Server错误:7303。 有人可以告诉我我在做什么错吗?我怎样才能使这两个服务器进行通信?

2
使用MAX分组,而不是MAX
我是一名程序员,正在处理一个具有以下方案的大表: UpdateTime, PK, datetime, notnull Name, PK, char(14), notnull TheData, float 上有一个聚集索引 Name, UpdateTime 我想知道什么应该更快: SELECT MAX(UpdateTime) FROM [MyTable] 要么 SELECT MAX([UpdateTime]) AS value from ( SELECT [UpdateTime] FROM [MyTable] group by [UpdateTime] ) as t 此表的插入是50,000行中具有相同日期的数据块。因此,我认为分组依据可能会简化MAX计算。 与其尝试查找最多150,000行,不如将其分组为3行,然后计算MAX会更快?我的假设是正确的还是分组依据也代价高昂?

2
创建具有较大初始大小的新数据库
我想用200GB的数据文件(.mdf)和50GB的日志文件(.ldf)创建一个新数据库。 但这很慢(大约15分钟,但尚未创建)。而且非常耗时。那正常吗?如果是,那需要时间吗?我可以提高其创建速度吗? 我正在使用SQL Server 2008 R2,Windows Server 2008R2、16GB RAM(在ssms中将其限制为12GB)和Core i7 Cpu

3
使用共享登录名时,如何知道用户对审核表执行删除操作?
背景资料: 我正在创建审核表的集合,以跟踪对我的应用程序的一组数据表的更新和删除。 审计记录是通过触发器创建的。 我的应用程序数据库中的DML通常来自服务用于进入数据库的登录名。因此,我认为SYSTEM_USER在触发器中调用时,结果始终是相同的。 我的应用程序当前不存储用户数据,尽管UserId每次执行DML时都会为其分配一个字符串(仅在存储过程中完成)。 我遇到的问题是,当用户删除记录时,我想知道是谁做的。因为它将通过相同的登录完成,所以我不想看到所有操作都是由服务完成的,所以我想看看哪个用户做了。这不是更新的问题,因为我们有一些ModifiedBy列会通过发送更新来UserId更新。 问题是:SYSTEM_USER运行删除操作时,有没有办法将用户信息设置为或以其他方式使用户信息进入触发器? 我现在拥有的“最佳”想法(尽管我不确定这是否是一个好主意)是,在服务中,我检查是否当前UserId作为用户存在于数据库中,如果不是,则创建一个用户为他们反对。然后使用运行存储过程EXECUTE AS User = @UserId。然后,当在存储过程中完成DML并触发触发器时,SYSTEM_USER应从中返回用户EXECUTE AS。

1
SQL Server-如何确定实例的理想内存?
我们有一些虚拟机分配了X内存。此内存量有些随机。之所以将其分配给计算机,是因为这是物理计算机具有的内存量,是由于供应商的推荐,或者是因为我们对实例所需的内存进行了最佳猜测。 我知道内存越多越好,但是我也想避免在不必要的时候为VM过度分配内存。该内存可以被另一台机器更好地利用。 确定每个实例实际处于活动状态并正在使用的理想内存量的最佳方法是什么?除了页面预期寿命之外,我们还应该考虑其他指标吗?我们的实例的PLE为10k +,其他实例的PLE为100k +。 非常感谢任何见解。谢谢山姆



2
“清除”启用了即时文件初始化的SQL Server数据库文件?
我在SQL Server上启用了即时文件初始化,因此数据库文件的“空”部分在分配之前没有清零。我的理解是,这意味着该文件可能包含“已删除”数据。 因此,现在我想向公司外部发送数据库的副本(可能是备份文件)。但是,所有潜在的敏感“已删除”数据都位于文件内部。现在,我想将文件的未使用部分归零。 那可能吗?我想我可以创建一个新数据库并复制所有内容,或者在不启用即时文件初始化的情况下将数据库的副本还原到另一台服务器,然后使用ShrinkFile命令主动删除数据库文件的大部分或全部未使用部分,但是有没有那么耗时的手动方法?理想情况下,该命令告诉SQL将文件归零,就像未启用即时文件初始化的情况一样。

3
更新大复制维度(SQL Server PDW)
我们将SQL Server PDW设备用于我们的数据仓库。我们仓库中的表之一是具有约2000万行的复制表。作为ETL流程的一部分,我们需要使该维度的旧记录过期;但是,我们看到更新少数记录(<100)需要1个小时以上才能完成。如果可以的话,这就是我想要改进的地方。 自然,我想到的一个选择就是将“维度”从“复制”更改为“分布式”。我的测试表明,这将解决ETL过程花费很长时间(从1.5个小时降低到30秒)的问题,但是针对此维度的分布式版本的所有联接都将受到影响,因为联接几乎从未基于同一分布柱。当我查看其中一些查询的执行计划时,通常会看到ShuffleMove或BroadcastMove操作。 因此,我对PDW专家的问题是: 为了提高在此Dimension 的复制版本中更新记录的性能,是否可以做其他事情? 再一次,移动到分布式表似乎不是最好的解决方案,因为它会影响其他人开发的数百个已编写的SQL查询和报告。

1
SQL Server最大和最小内存配置
在此用例中,最小内存和最大内存的正确设置是什么? 该服务器具有8GB内存,双Intel Xeon处理器,运行Windows Server 2008 R2 / SQL Server 2008 Standard Edition。它运行着多个数据库,大小从30GB到5GB不等。 最初,内存使用情况已设置为默认设置(最小= 0,最大= 2,147,483,647)。在这些设置上,大多数内存使用量已由sqlservr.exe占用,并且最终将需要每天或每两天重新启动服务器一次。它最初会正常运行,但一天之内就会在一些简单的操作(例如,使用主键查找记录)上超时。 我更改了最小值= 4,096和最大值= 6,144。这样只会占用1.4GB的内存。但是,现在所有四个cpus始终以50-60%cpu的使用率运行。尽管服务器要稳定得多,但执行任务所需的时间大约要长1/3。

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.