标签: sql-server

阿拉伯语、希伯来语、英语和法语的 SQL Server 排序规则

我有需要支持 3 种不同语言的新 SQL Server 数据库。

如果我希望我的数据库支持以下内容,我需要选择哪些字符集和排序规则:

  • 希伯来语
  • 阿拉伯
  • 英语
  • 法语

sql-server collation

8
推荐指数
1
解决办法
3万
查看次数

从哪里开始学习了解 SQL Server 体系结构和内部结构?

我对 T-SQL 和 SQL Server 组件有基本的了解。我的目标是掌握我的技能并学习有关 SQL Server 的一切,最终成为未来的 DBA。我想了解深入的 SQL Server 内部结构,一切究竟是如何工作的,何时以及为什么。你能给我推荐一个好的起点吗?恕我直言,通过编程工作是不可能的。

sql-server

8
推荐指数
2
解决办法
2975
查看次数

未完成的简单 SQL 查询

我不太知道如何表述这个问题,因为我们还不太了解,但我想早点问,因为这看起来不应该被忽视。

本周我们的数据库服务器开始出现问题。这似乎是一个数据一致性问题,即使在非常简单的查询和小表上也表现为超时。我们在本周早些时候通过重新启动服务器“修复”了这个问题,它消失了,但现在它似乎又回来了,这次是在更重要的表上。例如,我刚刚做了一些调查,我正在查看这样的查询:

SELECT * FROM table WHERE id = 1234
Run Code Online (Sandbox Code Playgroud)

对于特定的 ID。该表有大约 30 多万行。但它似乎只发生在一小部分记录中。我敢打赌,当我重新启动服务器或备份并在另一台服务器上恢复数据库时,一切都会好起来的。但是我会尝试。

此时,我正在运行:

DBCC CHECKTABLE ('table', NOINDEX)
Run Code Online (Sandbox Code Playgroud)

但它似乎将永远运行。当我们第一次遇到问题时,我检查了有问题的表格,结果很好。这张新桌子要大得多。

一些背景技术信息:

  • SQL Server 2008 R2、Windows Server 2008 R2
  • AWS/EC2、m2.2xlarge、32 GB RAM、4 个 1TB RAID 0
  • 几乎没有磁盘IO,似乎大部分db都在内存中
  • 总数据库大小:100GB

ELB 卷是“全新的”。我们在本周创建了它们。

编辑:我只是使用了以下命令:

SELECT
    sqltext.TEXT,
    req.session_id,
    req.blocking_session_id,
    req.wait_type,
    req.wait_time,
    req.last_wait_type,
    req.wait_resource,
    req.open_transaction_count,
    req.transaction_id,
    req.total_elapsed_time
FROM
    sys.dm_exec_requests req
CROSS APPLY
    sys.dm_exec_sql_text(req.sql_handle) AS sqltext
Run Code Online (Sandbox Code Playgroud)

并发现我的查询正在等待共享锁(LCK_M_S),其中阻塞会话正在等待另一个被不存在的会话阻塞的共享锁。

编辑 2:好的,会话存在(我发现它使用sys.dm_exec_sessions),但它现在似乎没有做任何事情。

编辑 3:我找不到任何关于会话的有趣内容。我看到它来自哪个网络服务器,但没有其他太多。

编辑 4: 编辑 4:我们在我们的代码中发现了一个可能的错误:一个不能确保数据库连接关闭的函数。另一方面,看起来函数使用的事务被正确处理,在这种情况下,所有的锁都应该被清除。我还不是很清楚,但这似乎是可能的原因。我们将修复该错误并密切关注它。

sql-server sql-server-2008-r2

8
推荐指数
1
解决办法
3万
查看次数

主镜像日志为空,但镜像日志正常

我们有几十个主服务器和相应的镜像,大多数都运行良好,但其中1个运行异常。具体来说,sp_dbmmonitorresults对于给定的主数据库,proc 将所有列返回为 NULL,而sp_dbmmonitorresults在镜像上返回有效信息:

原理服务器上的历史记录

镜像服务器上的历史

现在,我大致知道原因是什么;当设置主服务器和镜像服务器时,主服务器上的区域设置不正确(时间正确但使用的是 +4 区域(美国等),在设置镜像后,时间区域更正为 GMT +0我知道男孩的错误,但是c'est la vie!)

编辑:19/12/2012

今天我删除了镜像,删除了镜像上的副本并重新设置了镜像,但是这并没有解决问题!我将在这个问题上悬赏以尝试找出问题的根源。

确认一下,如果我EXEC sp_dbmmonitorresults @database_name = 'ProScript'在每台服务器上手动运行,它会为主要服务器上的大多数值返回 NULL,但在镜像上返回正常,如下所示:

在主要运行时:

在此处输入图片说明 缩放:点击查看全尺寸版本

对着镜子跑的时候:

在此处输入图片说明 缩放:点击查看全尺寸版本

如您所见,时间是当前的并且数据库是同步的,但是主数据库上的 log_generation_rate、unsent_log、send_rate 等变量都为 NULL?

两台服务器都有监控作业每分钟运行一次,exec sys.sp_dbmmonitorupdate作为作业步骤等。

查看 sys.sp_dbmmonitorupdate 的来源,它从中获取这些值sys.dm_os_performance_counters- 所以如果我在镜像上运行以下内容:

SELECT  counter_name ,
        cntr_value
FROM    sys.dm_os_performance_counters
WHERE   instance_name = 'ProScript'
        AND counter_name IN ( N'Log Send Queue KB', N'Log Bytes Sent/sec', N'Redo Queue KB', N'Redo Bytes/sec', N'Transaction Delay', N'Log Bytes Flushed/sec', N'Transactions/sec' )
Run Code Online (Sandbox Code Playgroud)

我得到了很好的结果:

在此处输入图片说明

但是,如果我在主数据库上运行相同的 SQL,则没有行! …

sql-server mirroring

8
推荐指数
1
解决办法
1102
查看次数

获取整个 SQL Server 数据库统计信息的最有效方法

我要做的是查看我们的数据库并锁定所有auto-shrink设置,以及处理哪些数据库/表高度碎片化。

是否有我可以运行的特定脚本来获得每个数据库的好主意?

我知道我可以在每个表级别(至少 SQL Server 2005)运行以下内容:

DBCC SHOWCONTIG ('DB.TABLE');
Run Code Online (Sandbox Code Playgroud)

但是我可以运行什么来显示数据库中的所有表?

谢谢

sql-server-2005 sql-server

8
推荐指数
1
解决办法
364
查看次数

我可以自动收到 SQL 服务器中长时间阻塞的通知吗?

大约每周一次,我必须解决 SQL Server 2005 数据库上的阻塞链,这是由 Access 2003 前端的长期读取锁引起的。每当用户打开某个表单时就会解除锁定,并在用户完成滚动表单或关闭表单后解除锁定。由于我们的许多用户打开此表单作为参考,因此这些锁会保留一段时间。对该表的任何更新都会导致阻塞,突然间没有人可以从该表中进行选择,因为他们都在等待第一个锁。这对我们来说是一个很大的问题,因为许多应用程序都依赖于这些数据。我知道这种锁定行为是 Access 如何处理链接表的一部分。

我一直在通过 Activity Monitor 解决这个问题,只要我发现它,就会杀死任何一个是 Head Blocker 的 SELECT 进程。这是一个问题,不仅因为我手动完成它需要时间,还因为它是被动的。当我听说它时,它已经成为很多人的问题。

我想知道是否有一种自动方法来检查这些持久的阻塞链,并通过电子邮件发送或自动解决问题。逻辑看起来很简单(“如果任何与此 SELECT 查询匹配的进程阻塞了超过一分钟,请通知我/杀死它”)但我不知道如何使用 SQL Server 实现这一点。

对于它的价值,我认为正确的解决方案是修复或重写应用程序。然而,由于部门政治,这不是未来几个月的选择,所以我正在寻找一个权宜之计。

ms-access sql-server locking

8
推荐指数
2
解决办法
1万
查看次数

什么是 RFID 的合适数据类型,格式是否有标准定义?

我有一个数据库,可以根据嵌入鞋子中的 RFID 标签跟踪人们。此数据到达VARCHAR(MAX)与其他数据混合在一起的列中,没有特定的顺序。到目前为止,所有 RFID 值的格式如下:

AnnnnnnnnAnnAAAA  (where A = 0-9  and n = A-Z)
Run Code Online (Sandbox Code Playgroud)

我正在写一份报告,从这些消息中提取 RFID 并将它们存储在他们自己的表中。只要 RFID 遵循相同的模式,我就可以找到它们。如果 RFID 格式发生变化,我的提取过程将失败。

RFID标签有标准格式吗?哪种数据类型最适合存储 RFID 标签?

我现在就去VARCHAR(20)

sql-server datatypes

8
推荐指数
2
解决办法
3764
查看次数

如何确定何时创建新表来保存可以从查询中获取的数据?

我们有一张付款表,代理商会收到付款佣金。佣金取决于几个不同的因素,例如收到付款需要多长时间,因此在计算代理获得的佣金率时会涉及一些计算,但并不复杂。

例如,它可能永远不会比这更复杂:

SELECT Payments.Amount * CASE 
    WHEN DateDiff(year, Client.Received, Payments.DatePaid) = 1 THEN Rates.Rate1
    WHEN DateDiff(year, Client.Received, Payments.DatePaid) = 2 THEN Rates.Rate2
    ELSE Rates.Rate3 END
Run Code Online (Sandbox Code Playgroud)

构建第二个表来保存这些数据而不是在需要时随时查询是否有意义?或者我应该坚持使用在请求时提取数据的运行时查询?

更重要的是,在确定是否应该在需要数据的任何时候运行查询,或者数据是否应该存储在它自己的单独表中时,要使用哪些因素?

performance sql-server-2005 sql-server query-performance

8
推荐指数
2
解决办法
357
查看次数

SQL Server 数据库写入快照隔离是否会变慢?

我的系统中有很多死锁。

我想使用快照隔离来修复它们,但我的 DBA 对此有所保留。

他的担忧之一是快照隔离会减慢写入速度。这是因为它必须先写入缓存,然后写入 TempDb(行版本),然后才能返回给调用者。

“正常”写入可以只写入缓存然后完成。

这是行版本控制的工作方式吗?或者比这更复杂?它是否以某种方式并行执行这些操作?

还是快照隔离的写入速度较慢?

sql-server-2008 sql-server sql-server-2008-r2 snapshot isolation-level

8
推荐指数
1
解决办法
1380
查看次数

如何使联合视图更有效地执行?

我有一个大表(数千万到数亿条记录),出于性能原因,我们将其拆分为活动表和存档表,使用直接字段映射,并每晚运行存档过程。

在我们代码的几个地方,我们需要运行结合活动表和存档表的查询,几乎总是由一个或多个字段过滤(我们显然在两个表中都放置了索引)。为方便起见,有一个这样的视图是有意义的:

create view vMyTable_Combined as
select * from MyTable_Active
union all
select * from MyTable_Archive
Run Code Online (Sandbox Code Playgroud)

但是如果我运行一个查询

select * from vMyTable_Combined where IndexedField = @val
Run Code Online (Sandbox Code Playgroud)

它将在过滤之前对Active 和 Store 中的所有内容进行联合@val,这会降低性能。

@val在创建联合之前,是否有任何巧妙的方法可以让联合的两个子查询查看每个过滤器?

或者,您可能会建议使用其他一些方法来实现我的目标,即一种简单有效的方法来获取由索引字段过滤的联合记录集?

编辑:这是执行计划(您可以在这里看到真实的表名):

执行计划

奇怪的是,活动表实际上使用了正确的索引(加上 RID 查找?)但存档表正在执行表扫描!

index sql-server view union

8
推荐指数
1
解决办法
2万
查看次数