我正在观看来自http://technet.microsoft.com/en-us/sqlserver/gg313756.aspx 的Paul Randal 的 MCM 视频
从视频的27:11,作者说记录必须保存在一页中,不能在一页上有一半记录,在另一页上有一半记录。这个观点不是我学到的。但是我对此没有信心,因为我的母语不是英语,可能会误解保罗的意见。谁能帮忙解释一下?
提前致谢。
我有以下查询(针对问题进行了简化)我正在尝试加快只读数据库的速度...
SELECT
[sysid]
,[Date]=CONVERT(CHAR, DATEADD(D, [date], '1800-12-28'),101)
,[From]=[from_addr]
,[To]=[to_addr] --I'm a very long Text or NVARCHAR(MAX) Field
,[Subject]=[subject]
,CASE WHEN [attach] = 1 THEN 'Yes' ELSE 'No' END AS 'Att'
,[Code]=[ccode]
,[Staff]=[staff]
,[MatNo]=[mat_no]
FROM dbo.[email]
DYNAMIC WHERE CLAUSE ON ANY OF ABOVE
Run Code Online (Sandbox Code Playgroud)
我已经尝试添加一些索引,包括覆盖索引我不能包含 to_addr 的方式(作为文本或 NVARCHAR(MAX) col),并且查询优化器最终使用聚集索引,因为不包含 to_addr 字段。有什么方法可以处理这样的情况?不幸的是,我仅限于 2005 年。
尝试添加 Full_Text For to_addr 仍然进行表扫描。但是,如果我注释掉该行,它将使用索引。:(该死的文本数据!
performance index sql-server-2005 sql-server index-tuning query-performance
我正在尝试将数据从一个数据库系统转换为另一个数据库系统。我需要传输和格式化的表之一包含超过 1000 万行。
我正在运行以下脚本来做到这一点:
USE [Cvti101687]
go
truncate table [IDAT_MR_NOTEHISTORY]
go
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[IDAT_MR_NOTEHISTORY]') AND name = N'PK_iMR_NOTES')
ALTER TABLE [dbo].[IDAT_MR_NOTEHISTORY] DROP CONSTRAINT [PK_iMR_NOTES]
GO
USE [101687_test2]
GO
declare @ChunkCounter int
declare @ChunkSize int
set @ChunkCounter = 0
set @ChunkSize = 50000
--hack to do a do-while loop in sql
while 1 = 1
begin
insert into cvti101639..IDAT_MR_NOTEHISTORY with (tablock)
SELECT newid(), '00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000000'
,'00000000-0000-0000-0000-000000000000', ISNULL(TargetClientAccountNum, [REC_CLINUM]), ISNULL(TargetPetAccountNum, ' ')
,ISNULL(pck_desc, 'Converted …Run Code Online (Sandbox Code Playgroud) 如何捕获或列出自上次实例重启以来使用提示并已执行的所有查询?
我使用的是 SQL Server 2005 标准版。
我正在处理一个 SQL 查询,它根据过去的购买(行业是场地票务)将客户历史记录放在一起。报告将是大的,类似于 80-90 列,输出 CSV 中的每个事件或每个记录的事件类别一列。
数据库结构要求我使用嵌套的 select 语句将必要的数据放入每条记录的列中——每列包含该类型事件的票证数量。我在理论上知道如何执行此操作,但是每个嵌入的 select 语句都非常大,以至于完整报告将突破我的数据库界面上的 8,000 个字符限制。这些语句之一如下所示:
(select count (*)
FROM
guest ig, event2 e, eventseat es, "order" o
WHERE ig.guestid = g.guestid
and ig.guestid = o.guestid
and o.orderid = es.orderid
and e.eventid = es.eventid
and e.incometype = 'T'
and e.eventtype in ('SS', 'BMF')
and es.status in ('2','4')
and es.price <> '0.00'
and es.price <> '5.00'
and e.year = '2010' <-- THESE LINES ARE THE ONLY ONES THAT
and e.run in ('SS-DANCE') <-- …Run Code Online (Sandbox Code Playgroud) 我创建了一个带密码的证书
CREATE CERTIFICATE testcert
ENCRYPTION BY PASSWORD = 'test123'
WITH SUBJECT = 'Certificate for stored procedures using dynamic SQL',
START_DATE = '2010-01-01',
EXPIRY_DATE = '2100-01-01'
Run Code Online (Sandbox Code Playgroud)
然后我删除了私钥
ALTER CERTIFICATE testcert REMOVE PRIVATE KEY
Run Code Online (Sandbox Code Playgroud)
最后,我尝试备份证书
BACKUP CERTIFICATE testcert TO FILE = 'd:\mssql\testcert.cer'
WITH PRIVATE KEY ( DECRYPTION BY PASSWORD = 'S3creT!' ,
FILE = 'd:\mssql\testcert.pvk' ,
ENCRYPTION BY PASSWORD = 'test123' );
Run Code Online (Sandbox Code Playgroud)
我得到这个错误:
消息 15246,级别 16,状态 1,第 1 行无法转储证书“testcert”的私钥,因为找不到私钥。
自从我删除私钥以来,这似乎很正常。
第一个问题:使用上一篇文章中解释的方法,这是否意味着要备份证书我会使用这个语句?
BACKUP CERTIFICATE testcert TO FILE = 'd:\mssql\testcert.cer'
Run Code Online (Sandbox Code Playgroud)
第二个问题:您将如何将证书恢复到另一台服务器和数据库?
例子 …
我服务器的 G: 驱动器空间正在迅速耗尽。它主要包含系统和用户数据库的数据文件 (*.mdf)。全文目录也存在于该驱动器上。
IT 添加了更大的 E:驱动器。
我想要:
这会导致 SQL Server 出现任何问题吗?在该过程结束时,所有文件都将位于 G:\ 驱动器上;只是不在原来的 G:\ 驱动器上。
我在我们的一台 SQL Server 机器上执行了这个:
EXEC sp_configure 'show advanced options', 1
然后执行RECONFIGURE。这向我展示了以下错误消息:
指定的关联掩码与指定的 IO 关联掩码冲突。使用 override 选项强制此配置。
通过执行RECONFIGURE WITH OVERRIDE我确实可以强制配置。但这不是解决错误消息中提到的冲突的方法。
中的值sp_configure如下:
name minimum maximum config_value run_value
affinity I/O mask -2147483648 2147483647 126 126
affinity mask -2147483648 2147483647 126 126
Run Code Online (Sandbox Code Playgroud)
我在这里找到了一些解释,但这基本上只是说“不应该有冲突”,没有关于如何解决它。有知识的人可以向我解释这个错误消息的实际含义以及我应该如何/是否应该尝试解决它?
2012 年 12 月 12 日更新
我们找不到任何理由为冲突的值的设置affinity I/O mask和affinity mask。我将它们改回默认值,两者均为 0。重新配置后affinity mask立即设置为 0,affinity I/O mask显然需要重新启动实例。
到目前为止,我已经花了大约 30 个小时努力sp_send_dbmail去上班。我终于得到了一些工作,但我严重怀疑它的安全性。我想知道一种更好但快速且易于设置的方法(此时我的时间受到严重限制),以及“理想”(最佳实践)解决方案。
当前 SQL Server 2005 配置
- `After Insert` Trigger on table executes `sp_send_dbmail`
- Database Mail SMTP Account setup (with successful mail test)
- Database Mail Profile setup (with "Public Profile" ticked)
- "guest" account added to "DatabaseMailUserRole"
Run Code Online (Sandbox Code Playgroud)
我发现这篇文章提出了“正确”的解决方案,我阅读了这篇文章,在那里我发现这是一个非常复杂的解决方案,似乎有太多可能出错的事情,更不用说难以维护了。
我对替代解决方案的想法是这些。
1. Setup an Application Role in msdb (this would be my first time using one
and not even sure if it IS a solution :P), and use it to ensure that …Run Code Online (Sandbox Code Playgroud) 使用在 Windows Server 2008 R2 SP1 上运行的 SQL Server 2012 Enterprise Edition SP1 对于 SQLOS 上的每个逻辑处理器核心,都有一个分配给它的调度程序。这些调度程序可以被视为状态“VISIBLE ONLINE”sys.dm_os_schedulers
工作线程(任务)可以在调度程序上运行,并且这些线程(任务)可以具有各种状态,例如基于等待队列
a) 暂停在等待队列中等待资源可用
b) 可运行队列(主要是 FIFO,除非受资源调控器控制)或
c) 当前在调度程序上运行。
我的问题是说例如一个任务(SELECT在这种情况下是查询)首先进入调度程序(我们称之为调度程序 A)但发现它必须等到页面被带入内存(IO 操作)它现在被放入等待队列在挂起状态下,一旦 IO 完成,该特定工作线程(任务)就会发出信号并按到达该队列的顺序放入可运行队列。
任务是否总是必须转到调度程序A来完成其时间片,或者它可以切换其上下文,现在可以在没有可运行任务的任何空闲调度程序(我们称之为调度程序B)上运行?如果有上下文切换,它的作用是什么?
sql-server-2005 ×10
sql-server ×7
bulk ×1
index ×1
index-tuning ×1
insert ×1
performance ×1
security ×1
select ×1
trigger ×1