我知道出于性能原因应该避免它,但我试图展示一个条件,它显示为演示如何确保它不会出现。
但是,我最终得到了缺少索引警告,但优化器选择不创建临时索引。
我正在使用的查询是
SELECT
z.a
FROM dbo.t5 AS z WITH(INDEX(0))
WHERE
EXISTS
(
SELECT y.a
FROM dbo.t4 AS y
WHERE y.a = z.a
)
OPTION (MAXDOP 1);
Run Code Online (Sandbox Code Playgroud)
表模式是:
CREATE TABLE dbo.t4
(
a integer NULL,
b varchar(1000) NULL,
p varchar(100) NULL
);
CREATE TABLE dbo.t5
(
a integer NULL,
b varchar(1000) NULL
);
CREATE UNIQUE CLUSTERED INDEX c1
ON dbo.t5 (a);
Run Code Online (Sandbox Code Playgroud)
两个表都有 10,000 行,您可以使用以下方法进行模拟:
UPDATE STATISTICS dbo.t4
WITH
ROWCOUNT = 10000,
PAGECOUNT = 1000;
UPDATE STATISTICS dbo.t5
WITH
ROWCOUNT = …Run Code Online (Sandbox Code Playgroud) 我有一个测试数据库,但我遇到了权限问题。
我无法访问报告数据库,并且应用程序的帮助文档说要执行以下操作:
Resolution:
1. Launch the SQL Server Management Studio and connect to the database server(s) hosting the Vision and Reporting Server databases.
2. Expand the security folder.
3. Select logins and right click on the <username> user and choose properties.
4. Click the User Mapping tab
5.Make sure the following databases are selected in the Users mapped to this Login:
ReportServer
ReportServerTempDB
Your Vision databases
This maps the login/user to the respective databases.
6. As you select each database …Run Code Online (Sandbox Code Playgroud) 我已经阅读了有关 MySQL 的内容。在我看来,我认为两种日志类型非常相似。MySQL 在日志中保存数据更改的方式和时间。信息用于 MySQL 的恢复。我混淆了两种日志类型的功能。
我有一个运行 Kaspersky Security Center 的 SQL Server 2008 R2 Express 数据库,我不知道安装是在什么情况下发生的,但数据库似乎认为它正在被复制并且不会从事务日志中释放任何空间。例如:
USE master;
SELECT
name, log_reuse_wait, log_reuse_wait_desc, is_cdc_enabled
FROM
sys.databases
WHERE
name = 'KAV';
SELECT DATABASEPROPERTYEX('KAV', 'IsPublished');
Run Code Online (Sandbox Code Playgroud)
返回:
name | log_reuse_wait | log_reuse_wait_desc | is_cdc_enabled
-----|----------------|---------------------|---------------
KAV | 6 | REPLICATION | 0
Run Code Online (Sandbox Code Playgroud)
DATABASEPROPERTYEX('KAV', 'IsPublished')
----------------------------------------
0 [not published]
Run Code Online (Sandbox Code Playgroud)
ReplicationSSMS的部分中也没有列出任何内容。
到目前为止,我已经尝试了从 Google 结果中收集到的几个语句:
USE KAV;
EXEC sp_repldone null, null, 0,0,1;
EXEC sp_removedbreplication KAV;
Run Code Online (Sandbox Code Playgroud)
但是我没有运气让这个数据库停止认为它正在被复制。
完整sys.databases信息:
USE master;
SELECT
name, log_reuse_wait, log_reuse_wait_desc, is_cdc_enabled
FROM
sys.databases
WHERE
name = …Run Code Online (Sandbox Code Playgroud) 我有 2 个查询,当同时运行时会导致死锁。
查询 1 - 更新包含在索引 (index1) 中的列:
update table1 set column1 = value1 where id = @Id
Run Code Online (Sandbox Code Playgroud)
在 table1 上使用 X-Lock,然后在 index1 上尝试 X-Lock。
查询 2:
select columnx, columny, etc from table1 where {some condition}
Run Code Online (Sandbox Code Playgroud)
在 index1 上使用 S-Lock,然后在 table1 上尝试 S-Lock。
有没有办法在保持相同查询的同时防止死锁?例如,我可以在更新之前以某种方式在更新事务中的索引上使用 X-Lock 以确保表和索引访问的顺序相同 - 这应该防止死锁?
隔离级别为 Read Committed。为索引启用了行锁和页锁。同一个记录可能同时参与了两个查询 - 我无法从死锁图中判断出来,因为它没有显示参数。
在 Postgres 9.5 中,我很惊讶地看到在尝试 year 0001(没有 year zero 0000)时看到的结果。
-07:52:58?一些示例代码。请注意,我混合使用了TIMESTAMP WITH TIME ZONE和TIMESTAMP WITHOUT TIME ZONE,所以请仔细阅读。
SET TIME ZONE 'America/Los_Angeles' ;
SELECT (TIMESTAMP WITH TIME ZONE '2015-01-01 00:00:00.0',
TIMESTAMP WITH TIME ZONE '0001-01-01 00:00:00.0Z',
TIMESTAMP WITHOUT TIME ZONE '0001-01-01 00:00:00.0Z') ;
("2015-01-01 00:00:00-08","0001-12-31 16:07:02-07:52:58 BC","0001-01-01 00:00:00")
Run Code Online (Sandbox Code Playgroud)
我对第二个值感到惊讶:0001-12-31 16:07:02-07:52:58 BC. 我知道我们必须America/Los_Angeles在 UTC后八小时后退八小时,偏移量为-08:00. 但不是-08:00偏移量是-07:52:58. 为什么?
在 UTC 下输入数据时没有这样的问题。
SET TIME ZONE 'UTC' …Run Code Online (Sandbox Code Playgroud) 只是希望证实我的观察并得到有关为什么会发生这种情况的解释。
我有一个函数定义为:
CREATE OR REPLACE FUNCTION "public"."__post_users_id_coin" ("coins" integer, "userid" integer) RETURNS TABLE (id integer) AS '
UPDATE
users
SET
coin = coin + coins
WHERE
userid = users.id
RETURNING
users.id' LANGUAGE "sql" COST 100 ROWS 1000
VOLATILE
RETURNS NULL ON NULL INPUT
SECURITY INVOKER
Run Code Online (Sandbox Code Playgroud)
当我从 CTE 调用此函数时,它执行 SQL 命令但不触发该函数,例如:
WITH test AS
(SELECT * FROM __post_users_id_coin(10, 1))
SELECT
1 -- Select 1 but update not performed
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我从 CTE 调用该函数,然后选择 CTE 的结果(或在没有 CTE 的情况下直接调用该函数),它将执行 SQL 命令并触发该函数,例如: …
这是破败:我在做一个选择查询。WHEREandORDER BY子句中的每一列都在一个非聚集索引中IX_MachineryId_DateRecorded,或者作为键的一部分,或者作为INCLUDE列。我正在选择所有列,因此将导致书签查找,但我只使用TOP (1),因此服务器肯定会告诉查找只需要在最后完成一次。
最重要的是,当我强制查询使用 index 时IX_MachineryId_DateRecorded,它会在不到一秒的时间内运行。如果我让服务器决定使用哪个索引,它会选择IX_MachineryId,并且最多需要一分钟。这真的向我表明我已经正确地建立了索引,而服务器只是做出了一个错误的决定。为什么?
CREATE TABLE [dbo].[MachineryReading] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Location] [sys].[geometry] NULL,
[Latitude] FLOAT (53) NOT NULL,
[Longitude] FLOAT (53) NOT NULL,
[Altitude] FLOAT (53) NULL,
[Odometer] INT NULL,
[Speed] FLOAT (53) NULL,
[BatteryLevel] INT NULL,
[PinFlags] BIGINT NOT NULL,
[DateRecorded] DATETIME NOT NULL,
[DateReceived] DATETIME NOT NULL,
[Satellites] INT NOT NULL,
[HDOP] FLOAT …Run Code Online (Sandbox Code Playgroud) 我们有一个只有大约 500 行的表,但这对我们来说非常重要。
我想查看发生在此表上的所有更改。应使用时间戳跟踪更改。
我不希望在应用程序代码中进行跟踪,因为我也想跟踪通过psqlshell发生的更改。
我对特定于 PostgreSQL 的解决方案感到满意,因为在这种情况下我没有使用不同的数据库。
如果在可用性组中的主节点上强制执行计划,它是否应用于在辅助节点上运行的查询?
我正在寻找涵盖计划强制两种可能性的答案:
我已阅读以下内容,这些内容表明 QS 强制计划不会结转,但在文档中找不到任何权威信息,或任何有关计划指南的信息。
强制的决定性证据是辅助节点的执行计划中存在Use Plan或PlanGuideName和PlanGuideDB属性。
sql-server execution-plan availability-groups query-store plan-guides
sql-server ×5
postgresql ×3
audit ×1
cte ×1
deadlock ×1
index ×1
index-spool ×1
locking ×1
mysql ×1
permissions ×1
plan-guides ×1
query-store ×1
replication ×1
t-sql ×1
timestamp ×1
timezone ×1