小编Col*_*art的帖子

扩展事件过滤器的性能影响 [like_i_sql_unicode_string]

我创建了一个扩展事件会话,我想在其中查看使用 nolock 提示的所有查询。我决定使用它而不是 sql trace 来最小化可能的性能影响。会话的创建类似于以下语句:

    CREATE EVENT SESSION [SCOMDB_debug] ON SERVER 
    ADD EVENT sqlserver.deprecation_announcement(
        ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)),
    ADD EVENT sqlserver.rpc_completed(
        ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
        WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))),
    ADD EVENT sqlserver.rpc_starting(
        ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
        WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))),
    ADD EVENT sqlserver.sp_statement_completed(
        ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
        WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))),
    ADD EVENT sqlserver.sp_statement_starting(
        ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
        WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))),
    ADD EVENT sqlserver.sql_batch_completed(
        ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
        WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))),
    ADD EVENT sqlserver.sql_batch_starting(
        ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
        WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))),
    ADD EVENT sqlserver.sql_statement_completed(
        ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
        WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))),
    ADD EVENT sqlserver.sql_statement_starting(SET collect_statement=(1)
        ACTION(sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver.session_id,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username)
        WHERE ([sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text],N'%NOLOCK%'))) 
    ADD TARGET package0.event_file(SET filename=N'M:\MSSQL11.SCOMDB\MSSQL\Log\SCOMDB_debug.xel',max_file_size=(500))
    WITH (MAX_MEMORY=40960 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
    GO
Run Code Online (Sandbox Code Playgroud)

结果是数据库实例(用于 SCOM 数据库)变得非常缓慢,应用程序几乎无法使用。

等待统计信息中充满了 SOS_SCHEDULER_YIELD …

sql-server extended-events sql-server-2012

5
推荐指数
1
解决办法
3583
查看次数

如何比较表中的所有行并使用触发器提取数据

我有两张表,一张表存储各种用户的 GPS 数据,另一张表存储基于 GPS 经纬度值和时间戳差异的用户空闲时间。

表T1内容:

id  uid  latitude   longitude    received_time          imno
435 25  13.041868   80.198868   2014-08-07 15:53:00     352944054874253 
436 25  13.041862   80.198868   2014-08-07 15:54:00     352944054874253 
437 25  13.041869   80.198868   2014-08-07 15:55:00     352944054874253 
438 25  13.041887   80.198871   2014-08-07 15:55:38     352944054874253 
439 25  13.041887   80.198871   2014-08-07 15:55:42     352944054874253 
440 25  13.041887   80.198871   2014-08-07 15:55:47     352944054874253 
441 25  13.041887   80.198871   2014-08-07 15:55:52     352944054874253 
442 25  13.041887   80.198871   2014-08-07 15:56:00     352944054874253 
Run Code Online (Sandbox Code Playgroud)

我必须比较具有相同纬度和经度值的行。

如果前一行的经纬度与下一行的经纬度相同,则计算时间戳差,直到下一行的经纬度值不相等。

例如,从 ID 438 到 442,纬度和经度值相同,所以我必须计算:

timediff = 442 received - …
Run Code Online (Sandbox Code Playgroud)

mysql

5
推荐指数
1
解决办法
372
查看次数

无法使数据库从恢复挂起状态联机

我正在尝试使处于恢复挂起状态的 SQL Server 数据库联机并可访问。SQL Server 服务使用一个 Active Directory 帐户,该帐户是域管理员并且是sysadminsql server 上的成员。SQL Server 帐户应该拥有 SQL 文件夹中的权限,因为它是域管理员。但是,它不是 SQL Server 中的本地管理员。

错误消息是:

消息 5120,级别 16,状态 101,第 1 行无法打开物理文件“F:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DBName.ndf”。操作系统错误 5:“5(访问被拒绝。)”。消息 5120,级别 16,状态 9,第 1 行无法打开物理文件“F:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\DBName.ndf”。操作系统错误 5:“5(访问被拒绝。)”。

尽管

alter database [DBName] set online;
Run Code Online (Sandbox Code Playgroud)

导致以下错误:

消息 945,级别 14,状态 2,第 1 行由于无法访问的文件或内存或磁盘空间不足,无法打开数据库“databs”。有关详细信息,请参阅 SQL Server 错误日志。消息 5069,级别 16,状态 1,第 1 行 ALTER DATABASE 语句失败。

你能想到解决办法吗?

sql-server-2008 security recovery corruption

5
推荐指数
1
解决办法
3万
查看次数

重新启动数据库服务器或只是数据库

我是一名应用程序员。我们有一个 SQL Server 2012 实例,它承载着许多相关的数据库(大约 12 个数据库)。供应商对数据库和应用程序之一进行了一些更改,他们希望我们重新启动数据库服务器。我做了一些研究,发现除非在服务器配置中进行了更改,否则重新启动数据库服务器总是不是一个很好的选择。有没有办法只重启那个数据库?那会有帮助吗?

sql-server configuration sql-server-2012

5
推荐指数
1
解决办法
1718
查看次数

职责分离 - DBA 能否在没有 TDE 加密密钥的情况下修补或升级 SQL Server 2008 R2 DB?

在修补或升级 TDE 加密数据库时,是否应该考虑任何注意事项?在职责分离的情况下,执行补丁或升级过程的人员是否需要访问 TDE 加密数据库的密钥或证书,或者可以在没有密钥的情况下修补数据库。答案很重要,因为我们是一家合法商店,希望应用程序管理员加密数据库并将数据库维护功能外包给 dba,以便在无法访问“应用程序数据”的情况下修补和升级数据库。你能解释一下吗?

sql-server encryption upgrade transparent-data-encryption

5
推荐指数
1
解决办法
380
查看次数

oracle 中的活动会话会死吗?

我有一个填充物化视图的耗时查询。它已经运行了 18 个小时 - 这是意料之外的。

SELECT STATUS
FROM V$SESSION
WHERE SID=194;
Run Code Online (Sandbox Code Playgroud)

上面的查询将会话显示为“ACTIVE”。我想知道这是否足以证明查询仍在运行,以及是否有任何其他方法可以仔细检查会话是否已死。

更新

会话并没有死;但一直在等待:

 SQL*Net more data from dblink 
Run Code Online (Sandbox Code Playgroud)

我按照 Phil 的建议使用了 sql trace 得出了这个结论。

oracle session

5
推荐指数
1
解决办法
328
查看次数

我们可以配置基于证书的身份验证来连接(登录)sql 客户端吗?

我们可以配置基于证书的身份验证来连接(登录)sql 客户端吗?或使用相互身份验证(sql server 和 sql client)连接 sql 客户端的任何其他方法?

security sql-server ssl

5
推荐指数
1
解决办法
5865
查看次数

从完全恢复切换到简单恢复

这是一个有助于我理解的理论问题。在sql server中从完全恢复模式切换到简单恢复模式的过程是什么?

是不是流程如下:

  1. 在切换到 simple 之前进行 trans log 备份,以便我可以在切换之前进行时间点恢复。
  2. 切换到简单。
  3. 可能使用 TRUNCATE ONLY 运行 DBCC SHRINKFILE 以释放一些磁盘空间。
  4. 可能更改数据库以减少 trans 日志文件的大小。
  5. 执行完整备份。

我想我的主要问题是关于第 1 点。如果我不进行 trans log 备份,将 SIMPLE 丢弃最终 trans log 中的任何数据,或者切换到 SIMPLE 备份 trans log(我认为不会)。

此外,我认为最好的做法是在切换到 SIMPLE 后执行完整备份,以便可以在检查点将新事务从 trans 日志推送到数据文件。

sql-server backup recovery

5
推荐指数
1
解决办法
6370
查看次数

修改维护计划后自动禁用 SQL 代理作业

我昨天修改了一个维护计划,今天早上(通过使用来自 sysjobs 的最后修改日期)发现与维护计划相关的所有作业都被禁用。

我无法弄清楚为什么会这样。SQL 作业所有者是sa,我只是用维护计划更改了维护清理任务并保存了作业。

sql-server sql-server-agent maintenance-plans

5
推荐指数
1
解决办法
2025
查看次数

以递归方式查找与视图相关的所有表 sql server

我有一个由其他视图(View-B View-C)组成的视图A,我想列出View-A使用的所有表(其中包括View-B和View-C中使用的表)。当我使用此代码时...

-- Get base tables for 'View-A' in Database-A 
USE Database-A 
GO
SELECT view_name, Table_Name
FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE View_Name = 'View-A'
ORDER BY view_name, table_name
GO
Run Code Online (Sandbox Code Playgroud)

...我只得到了 View-A 立即使用的表以及其他视图的名称(View-B、View-C)。有没有办法递归获取 View-B 和 View-C 也使用的表的名称?

sql-server metadata

5
推荐指数
1
解决办法
1万
查看次数