我有两个存储过程在系统负载时会死锁。Proc A 正在从一个表中选择,而 Proc B 正在插入同一个表中。锁图显示 Proc A 有一个 S 模式页锁,而 Proc B 想要一个 IX 模式锁,但是 Proc A 正在等待另一个页面的 S 模式页锁,而 Proc B 已经有一个 IX 模式页锁.
显然,这可以通过确保两个查询以相同的顺序锁定表中的页面来解决,但我不知道如何做到这一点。
我的问题是:在执行 INSERT 和 SELECT 时,SQL Server 如何确定锁定页面的顺序以及如何修改此行为?
来自 SQL Server 商店,我现在使用 MySQL,我很好奇。
MySQL的二进制日志和MSSQL的事务日志有什么区别?
从目前的前景来看,似乎每个 MySQL 实例只有一个二进制日志,而不是 MSSQL 中每个数据库的事务日志。
故障转移服务器具有状态(镜像、断开连接、恢复中),主体服务器具有状态(主体、断开连接)。
重新连接这些服务器的过程是什么?
我有一个 SQL Server 2005 开发数据库,它是一个 30GB 的 live 副本。我们删除了一些开发中不需要的数据,这使得使用的数据文件空间降到了 20GB。所以我们有大约 33% 未使用。
我需要回收空间,这将允许我们在服务器上拥有第二个开发数据库(基于缩减版本);但是,我无法收回空间,我已完成以下操作:
文件的初始大小SMS2_Data为 30GB。
DBCC SHRINKFILE (N'SMS2_Data' , 0, TRUNCATEONLY)
Run Code Online (Sandbox Code Playgroud)
其次是
DBCC SHRINKFILE (N'SMS2_Data' , 19500)
Run Code Online (Sandbox Code Playgroud)没有喜悦。我尝试进行备份,创建一个初始大小较低的新数据库,然后恢复,但初始大小被覆盖时并不高兴。也试过:
ALTER DATABASE SMS2HazSub MODIFY FILE (NAME = 'SMS2_Data', SIZE = 20000)
Run Code Online (Sandbox Code Playgroud)
这错误,说:
修改文件失败。指定大小小于当前大小。
我尝试了 20800,然后一直上升到 29000(29GB),但它仍然不让我改变它。
完成了收缩,然后将恢复模式从FULL到SIMPLE和再更改回来。没有喜悦。
我认为这与某些TEXT领域有关。我们在整个系统中大约有 6 个。因此,作为测试,我将它们全部删除,然后对文件进行了缩小,但仍然没有变化。
剩下的唯一选择是将数据重新导入另一个数据库。这是不切实际的,因为它必须在实时数据库上完成,这会带来太多风险。我们半定期地获取实时数据库的副本并覆盖开发/测试。我们有大约 500 张桌子。我想要一种不会将数据导出到新数据库的风险的方法。
我尝试将数据移动到另一个文件,它复制了除 5% 之外的所有数据。这就是导致我尝试删除所有文本列的原因。
服务器处于兼容模式 90,但为 SP2。我现在已经完成了以下 3 次:重新索引所有表、备份数据库、收缩文件、收缩数据库。还是没有快乐。
EXECUTE sp_spaceused 返回:
database_name database_size unallocated space
SMS2Tests 31453.94 MB 13903.16 MB
reserved …Run Code Online (Sandbox Code Playgroud) 鉴于被苹果以 2 亿美元收购的自然语言用户界面Siri的流行,我想知道是否有人知道微软为什么在 SQL Server 上杀死了“English Query”。
这个标题是个问题。我很想知道答案。有人告诉
选择进入最低限度地登录简单恢复模型数据库......我根本没有进入它。
摘自微软:
SELECT...INTO 的日志记录量取决于对数据库有效的恢复模型。在简单恢复模型或大容量日志恢复模型下,批量操作的日志记录最少。通过最少的日志记录,使用 SELECT... INTO 语句比创建表然后使用 INSERT 语句填充表更有效
寻求帮助
谢谢
我想试验 3 个大型数据库管理系统。为此目的,为每个数据库使用相同的数据库(相同的表等)会很酷。
在哪里可以找到为 MySQL、MSSQL 和 Oracle 创建相同测试数据库的 sql 脚本?
在阿拉伯语中,我们有这样的字符?(alef) 和 ? (alef 与 hamza)。
用户可以互换地编写它们,我们希望可以互换地搜索它们。SQL Server 将它们视为单独的字符。如何让 SQL 将它们视为相同的字符?
我想更换任何?(alef 与 hamza)与 ? (alef) 在插入时,但我们有很多阿拉伯语的替代品,不仅仅是 ? (alef) 和 ? (alef 与 hamza)。
我试过了Arabic_CI_AS,Arabic_CI_AI但这并不能解决问题。
这是一个重新生成问题的脚本:
CREATE TABLE [dbo].[TestTable] (
[ArabicChars] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED
(
[ArabicChars] ASC
)
) ON [PRIMARY];
INSERT INTO TestTable values (N'????');
INSERT INTO TestTable values (N'????');
SELECT *
FROM TestTable
WHERE ArabicChars like N'?%';
Run Code Online (Sandbox Code Playgroud)
结果是:
ArabicChars
????
(1 row(s) affected)
Run Code Online (Sandbox Code Playgroud)
所需的结果将是我们插入的两行。
镜像和故障转移群集之间的主要区别是什么?
每个人解决什么样的问题,在什么样的场景中推荐每个人?
在为使用 SQL Server 的应用程序运行性能测试/基线之前,我希望能够将实例设置为“干净”状态,而无需重新启动实例。我倾向于遵循一些步骤,但我想构建一个按正确顺序排列的明确列表,并且没有多余的步骤。
此步骤列表是否完成将 SQL Server 设置为“干净”状态?
顺序是否合乎逻辑/正确?
有没有多余的步骤?
CHECKPOINT -- Write all dirty pages
DBCC DROPCLEANBUFFERS -- All should be clean after checkpoint?
DBCC FREEPROCCACHE -- Clear the plan cache
DBCC FREESYSTEMCACHE -- Is this necessary after FREEPROCCACHE?
DBCC FREESESSIONCACHE -- May not be necessary if distributed queries aren't used, but want to catch all scenarios
EXEC SP_UPDATESTATS -- Refresh stats
'BEGIN TESTING!'
Run Code Online (Sandbox Code Playgroud) sql-server ×10
mirroring ×2
mysql ×2
cache ×1
clustering ×1
collation ×1
dbcc ×1
deadlock ×1
failover ×1
locking ×1
oracle ×1
performance ×1
shrink ×1