如果我使用ntext、text或image数据类型对表进行分区并使用 重建单个分区上的索引online = off,这会锁定整个表还是仅锁定有问题的分区?
谈论“LOB”和“二进制”数据时有什么区别?
就二进制数据存储在单独的文件组中而言,它是相同的,还是存在差异?
我正在与一位同事合作,他建议将我们的 1 个实例数据库拆分为大约 7 个数据库(按数据域划分)用于开发和 7 个相同的数据库用于生产。我得到了测试生产二元性逻辑,但是在什么情况下或将我们的 1 个相对简单的数据库拆分为 7 个数据库有什么优势?我们的数据仓库仅由一个商业智能应用程序消耗/使用,期间。
我很关心这个方向,所以希望你能讨论提出这个拆分的一般原因,我可以给你一个数据库当前属性的概要。
1 个数据库数据仓库:总共 352 GB,203 个表,170 个视图
建议拆分:
A: 280 GB
B: 43 GB
C: 28 GB
D: 1 GB
E,F,G: < 1 GB combined
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,就提议的好处而言,这已经是一个令人头疼的问题,因为存储甚至不会远程平均分配,80% 还留在 1 个数据库上。显然,按架构对我们的数据库进行分区是不可能的(从硬件角度来看),因为我们没有企业级 SQL Server。
给出的拆分原因:
我的菜鸟想法:这些问题不是和数据库拆分无关吗?它们只是需要以任何方式自行解决的问题。
我的想法:在我看来,这似乎并不大。
我的想法: .... 这对我来说似乎完全荒谬,但也许我错了。我们已经按照 13 个“源系统”模式组织了我们的数据仓库。
-- 这个问题不是也和多数据库完全无关吗?我的理解是死锁发生在表级别(实际上通常甚至只是行级别,但是呃)。即便如此,我们所有的数据插入都发生在午夜,我们所有下游到 BI 的选择发生在凌晨 2 点。让两个进程更新同一个表与多个数据库无关,是不是(死锁会发生)?另外,我个人没有看到在正常操作期间发生表死锁的证据。
只有我们两个人在数据库上工作。他有可能真的想隔离我们的“封地”。真的,这不是问题,但无论如何不能在架构级别确定用户权限吗?
将数据仓库拆分为多个数据库的正当理由是什么?
很想在这里进一步了解一般的数据库。是的,我碰巧在我的知识空白处做了很多工作,但这份工作就是它,我一直在努力。到目前为止,东西一直很好用(敲木头)。
我有 3 个“大”表,它们连接在一对列上(都是ints)。
每个表在Key1、上都有一个聚集索引Key2,然后还有一个列。Key1具有低基数并且非常偏斜。它总是在WHERE子句中被引用。条款中Key2从未提及WHERE。每个连接都是多对多的。
问题在于基数估计。每个连接的输出估计变小而不是变大。当实际结果达到数百万时,这导致最终估计值低至数百。
我有什么办法可以让 CE 做出更好的估计吗?
SELECT 1
FROM Table1 t1
JOIN Table2 t2
ON t1.Key1 = t2.Key1
AND t1.Key2 = t2.Key2
JOIN Table3 t3
ON t1.Key1 = t3.Key1
AND t1.Key2 = t3.Key2
WHERE t1.Key1 = 1;
Run Code Online (Sandbox Code Playgroud)
我尝试过的解决方案:
Key1,Key2join sql-server many-to-many sql-server-2016 cardinality-estimates
我必须从 221+ 百万行表中删除 16+ 百万条记录,而且执行速度非常慢。
如果您分享使以下代码更快的建议,我将不胜感激:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
DECLARE @BATCHSIZE INT,
@ITERATION INT,
@TOTALROWS INT,
@MSG VARCHAR(500);
SET DEADLOCK_PRIORITY LOW;
SET @BATCHSIZE = 4500;
SET @ITERATION = 0;
SET @TOTALROWS = 0;
BEGIN TRY
BEGIN TRANSACTION;
WHILE @BATCHSIZE > 0
BEGIN
DELETE TOP (@BATCHSIZE) FROM MySourceTable
OUTPUT DELETED.*
INTO MyBackupTable
WHERE NOT EXISTS (
SELECT NULL AS Empty
FROM dbo.vendor AS v
WHERE VendorId = v.Id
);
SET @BATCHSIZE = @@ROWCOUNT;
SET @ITERATION = @ITERATION + …Run Code Online (Sandbox Code Playgroud) “SQL 最终子树成本”和“查询时间性能”之间的一般关系是什么?
示例:当优化查询并且它从子树成本 0.2 到 0.1 时,这是否意味着查询时间将快两倍?我在查询中没有看到这种情况。
我们有一个服务器,即使使用“设置统计时间”和“DBCC DROPCLEANBUFFERS”也无法真正衡量查询性能。服务器、事务、程序、后台项目中有不同的进程在进行。
谢谢,
performance database-design sql-server optimization performance-tuning
如何将我的TempDB 数据或日志文件从现在的任何位置移动到不同的驱动器或文件夹?
将表格“展平”成单行的最佳方法是什么?
例如,使用下表:
+-----+-------+-------------+------------------+
| Id | hProp | iDayOfMonth | dblTargetPercent |
+-----+-------+-------------+------------------+
| 117 | 10 | 5 | 0.1400 |
| 118 | 10 | 10 | 0.0500 |
| 119 | 10 | 15 | 0.0100 |
| 120 | 10 | 20 | 0.0100 |
+-----+-------+-------------+------------------+
Run Code Online (Sandbox Code Playgroud)
我想生成下表:
+-------+--------------+-------------------+--------------+-------------------+--------------+-------------------+--------------+-------------------+
| hProp | iDateTarget1 | dblPercentTarget1 | iDateTarget2 | dblPercentTarget2 | iDateTarget3 | dblPercentTarget3 | iDateTarget4 | dblPercentTarget4 |
+-------+--------------+-------------------+--------------+-------------------+--------------+-------------------+--------------+-------------------+
| 10 | 5 | 0.14 | 10 …Run Code Online (Sandbox Code Playgroud) 在这个问题中,我正在使用sys.sysobjects. 但是,提到的答案之一sys.system_objects。我只是想知道这些表之间有什么区别?
sys.objectssys.system_objectssys.sysobjectssysobjects 有更多的东西。
> SELECT count(*) FROM sysobjects;
2312
> SELECT count(*) FROM sys.system_objects;
2201
> SELECT count(*) FROM sys.objects;
> 111
SELECT count(*)
FROM sys.sysobjects
WHERE NOT EXISTS (
SELECT 1
FROM sys.system_objects
WHERE system_objects.object_id = sysobjects.id
);
> 111
Run Code Online (Sandbox Code Playgroud) 几年来,我的开发箱上安装了 SQL Server 2014 Standard 作为默认实例的副本。我在我的机器上安装了标准,因为我有一个免费的许可证,可以通过我的 MSDN 订阅使用。现在我想卸载 SQL Server 2014 并将 SQL Server 2017 Developer Edition 设为我的默认实例。我尝试通过标准的“添加/删除程序”工作流卸载 SQL Server 2014,但在询问我要卸载哪些功能后,它提示我输入包含卸载媒体的目录。不幸的是,我没有保存从 MSDN 获得的 SQL Server 2014 下载包,并且我无法再访问 MSDN。我还检查了我的 Visual Studio,但它只能返回到 SQL Server 2016。如何在没有安装媒体的情况下卸载 SQL Server 2014 Standard?
进一步的背景:
我想卸载 SQL Server 2014 的全部原因是我想使用STRING_AGGAzure SQL 数据库和 SQL Server 2017 的新功能。例如,为了更轻松地设置开发环境,我们对本地环境开发连接字符串使用点表示法我们的连接字符串是:
Data Source=.;Initial Catalog=<Database Name>;Trusted_Connection=True;Connection Timeout=30;
Run Code Online (Sandbox Code Playgroud)
点表示法连接到默认数据库,据我所知,如果不先卸载 SQL Server 2014,我无法将 SQL Server 2017 设为默认数据库。如果我可以在不卸载 SQL Server 2014 的情况下使用点符号连接字符串连接到 SQL Server 2017,那么我也愿意接受该解决方案。
sql-server ×10
performance ×2
t-sql ×2
datafile ×1
delete ×1
join ×1
many-to-many ×1
optimization ×1
partitioning ×1
pivot ×1
tempdb ×1