我使用这些查询从 SQL Server 数据库访问事务
Use Action
Go
Select * from fn_dblog(null,null)
Run Code Online (Sandbox Code Playgroud)
此查询有效,但当数据库中的一个表包含超过 100,000 条记录时仅加载 7 行 接下来我使用此查询来恢复历史记录
SELECT * FROM fn_dump_dblog(NULL,NULL,'DISK',1
,'D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\Action.bak'
,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL, NULL,NULL,NULL,NULL,NULL,NULL
,NULL,NULL,NULL,NULL)
Run Code Online (Sandbox Code Playgroud)
这个查询没有错误,但只恢复了 37 行。如果我恢复备份,一张表中有超过 100,000 条记录。当我运行这些查询时,我希望看到数百或数千行。
唯一合乎逻辑的答案是文件中的事务是有限的。但事务日志的文件大小为 1.5 GB。我可以运行任何命令来检查日志文件中的事务数吗?
谁能解释我如何使这些查询工作以恢复事务日志中的每个事务?
我试图查看我的所有备份是否已压缩。我运行下面的查询来检查但没有得到好的结果:
select top(10) database_name,
case when backup_size = compressed_backup_size then 'Compressed'
else 'Not compressed'
end as Compression,
backup_finish_date
from msdb.dbo.backupset
where database_name ='MyDAtabase'
order by backup_start_date desc
Run Code Online (Sandbox Code Playgroud)
我在用:
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64)
2012 年 6 月 28 日 08:36:30 版权所有 (c)
Windows NT 6.1(内部版本 7601:Service Pack 1)上的Microsoft Corporation标准版(64 位)
默认情况下,我们设置了压缩,但是一旦我运行该查询,我得到的结果数据库没有被压缩。
是否可以为某个用户生成用户已获得显式访问权限的对象列表?
我想查看用户拥有明确权限的所有项目的列表,不包括通过角色等继承的任何权限。
我想知道是否有人可以阐明我的担忧,即query_plan_hash碰撞可能导致查询作为完全不同的查询执行。
散列是一个 16 位的十六进制,sp_help sys.dm_exec_query_stats表示是一个二进制。因此它只是一个 64 位的散列,并且碰撞似乎很有可能(考虑到 SHA1 [160 位] 刚刚被验证有碰撞)。
请问plan_hash并query_plan_hash都有碰撞的这个(查询作为一个完全不同的查询被执行)的情况发生?
我也很好奇 SQL Server 中是否有设置允许我们将此哈希更改为 SHA2-512(以减少发生冲突的可能性)。我们的数据非常重要。
我通过 Google 和 Stack Exchange 论坛进行了高低搜索。
SQL Server 2008 R2,Dynamics AX 2009 我们有这个丑陋的查询
DECLARE @P1 NVARCHAR(5), @P2 INT, @P3 INT, @P4 NVARCHAR(11), @P5 INT, @P6 NVARCHAR(5), @P7 NVARCHAR(11)SELECT A.SALESID,
A.LINENUM,
A.ITEMID,
A.SALESSTATUS,
A.LEDGERACCOUNT,
A.NAME,
A.EXTERNALITEMID,
A.TAXGROUP,
A.QTYORDERED,
A.SALESDELIVERNOW,
A.REMAINSALESPHYSICAL,
A.REMAINSALESFINANCIAL,
A.COSTPRICE,
A.SALESPRICE,
A.CURRENCYCODE,
A.LINEPERCENT,
A.LINEDISC,
A.LINEAMOUNT,
A.CONFIRMEDDLV,
A.RESERVATION,
A.SALESUNIT,
A.DIMENSION,
A.DIMENSION2_,
A.DIMENSION3_,
A.PRICEUNIT,
A.PROJTRANSID,
A.INVENTTRANSID,
A.CUSTGROUP,
A.CUSTACCOUNT,
A.SALESQTY,
A.SALESMARKUP,
A.INVENTDELIVERNOW,
A.MULTILNDISC,
A.MULTILNPERCENT,
A.SALESTYPE,
A.BLOCKED,
A.COMPLETE,
A.REMAININVENTPHYSICAL,
A.TRANSACTIONCODE,
A.TAXITEMGROUP,
A.TAXAUTOGENERATED,
A.UNDERDELIVERYPCT,
A.OVERDELIVERYPCT,
A.BARCODE,
A.BARCODETYPE,
A.INVENTREFTRANSID,
A.INVENTREFTYPE,
A.INVENTREFID,
A.ITEMBOMID,
A.LINEHEADER,
A.SCRAP,
A.DLVMODE,
A.INVENTTRANSIDRETURN,
A.PROJCATEGORYID,
A.PROJID,
A.INVENTDIMID,
A.TRANSPORT,
A.STATPROCID, …Run Code Online (Sandbox Code Playgroud) 我在 5.6.35-81.0 Percona Server 上有一个大型 MySQL 表,主键中有间隙。该表有大约 5300 万条记录,自动增量键现在约为 3.7 亿条。该表是电话号码列表,用户添加/删除号码非常频繁,因此 BIGINT 的 PRIMARY 键内部有间隙。
我现在面临的问题是,当我做一个简单的 SELECT * FROM 表时,MySQL 默认不使用 PRIMARY 键对结果进行排序。它使用表中的电话号码字段对数据进行排序,因此数据被按顺序选择,而不是按顺序保存在数据库中。
带有 ORDER BY id 的 Offcourse SELECT 需要很长时间。另一种解决方案是将所有数据复制到另一个表,但这需要应用程序停机。我怎样才能解决这个问题或在未来避免这种情况?
CREATE TABLE `contacts` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`phonebook_id` int(11) NOT NULL,
`campaign_id` int(11) DEFAULT NULL,
`contact` varchar(45) NOT NULL,
`status` tinyint(1) unsigned NOT NULL DEFAULT '1',
`admin` tinyint(1) unsigned NOT NULL DEFAULT '0',
`call_status` tinyint(1) unsigned NOT NULL DEFAULT '1',
`active_call` tinyint(1) unsigned NOT NULL DEFAULT '0', …Run Code Online (Sandbox Code Playgroud) 我有一个要优化的查询,如下所示:
SELECT 1 FROM HugeView
WHERE (Col1 = 'a' AND @val = 1) OR (Col2 = 'a' AND @Val = 0)
(where Col1 and Col2 are on different tables)
Run Code Online (Sandbox Code Playgroud)
如果我对@Val值 (1/0) 进行硬编码- SQL Server 知道构建一个执行计划,在该计划中它只访问Col1或的相关表Col2。
但是当使用一个变量时,所有的表都会HugeView被访问。
您能否建议一种可以帮助 SQL Server 不访问不必要表的方法?
限制:
option (recompile)HugeView不幸的是,上述所有限制都是产品设计和/或开发范围的一部分——我对此无能为力——只能在我拥有的范围内工作。
但是,我知道它@var是 1 或 0,并且可以根据需要创建和查询(并加入)临时表或“真实”表。
另请注意,我没有从Col1or的表中进行选择Col2- 我仅将它们用于过滤。
我尝试在空表上创建和加入,或者top(@somevar)根据@var的值 - 但没有帮助。
UNION ALL不会有帮助,因为在任何情况下优化器都不知道 …
我“即将”在我的一个应用程序上实现一项功能,该功能需要存储大量数据(播放列表)。
假设以下场景:
播放列表条目由以下类表示:
public class Item {
private Long owner; // User
private String data;
private String name;
private String author;
private int index; // Index of this item on the list
}
Run Code Online (Sandbox Code Playgroud)
TL;DR:List< Item >对于每个用户(每个用户超过 1 个),此列表可以扩展到 500k+ 个条目。
目前,我为此使用了基于 SQL 的存储,但是,它很慢,特别是当我需要移动索引时 - 慢到我的数据库驱动程序认为连接失败并泄漏的程度。
解释“移位索引”:假设我正在删除第 3 个索引 ( i = 3)处的一个项目,这意味着它之后的所有其他项目都需要向下移动一个索引,因此我稍后可以请求索引 3 并获取该项目以前是索引 4。
目前,我会在Order删除后减少所有元素的播放列表的列值。
Id (Ordering/Index) | PlayList …Run Code Online (Sandbox Code Playgroud) 我正在构建一个 POS 系统,在那里我收集事件发生的日期和时间。我想通过DATE在我的 SQL 查询中仅使用datetime 列的一部分来提取一些报告。
我当前的查询如下所示:
SELECT * FROM tbl_item_trans
WHERE (date_time BETWEEN @start AND @end)
ORDER BY date_time DESC, code
Run Code Online (Sandbox Code Playgroud)
但是,如果我输入两个日期,例如 9 月 14 日和 15 日,它只会从 14 中提取数据。如果我想包括 9 月 15 日的交易,结束日期必须是 9 月 16 日。
我怎么解决这个问题?如果我只使用专栏的DATE一部分,那就更好了datetime。
在@start与@end变量使用date的数据类型,例如“2017年9月16日”。
IF (SELECT ars.role_desc
FROM sys.dm_hadr_availability_replica_states ars
INNER JOIN sys.availability_groups ag
ON ars.group_id = ag.group_id
AND ars.is_local = 1) <> 'PRIMARY'
BEGIN
--We're on the secondary node, throw an error
THROW 50001, 'Unable to execute job on secondary node',1
END
Run Code Online (Sandbox Code Playgroud)
设置此步骤以在成功时继续下一步,并在失败时退出报告成功的作业。
你能解释一下如何在所有现有的 SQL 服务器作业中添加这个步骤吗?
sql-server ×8
backup ×1
compression ×1
date ×1
hashing ×1
jobs ×1
mysql ×1
optimization ×1
percona ×1
performance ×1
permissions ×1
tuning ×1
where ×1