小编Pau*_*ite的帖子

如何找到导致tempdb增长的SQL语句?

服务器 (SQL Server 2008) 的 tempdb 每月数次增加到 500GB+。是否可以找出导致此问题的 SQL 语句?问题通常不是由create table #temp...; insert into #temp...select ... into #temp...复杂的连接引起的。

某些 tempdb 文件的初始大小每次也会自动设置为更大的值。如何预防?

有时缓存的计划会阻止调整/缩小文件的大小。如何找到哪一个持有tempdb?

sql-server-2008 sql-server tempdb

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

Varchar(max) 字段在 8000 个字符后截断数据

我有一个字段来存储一些数据,该字段声明为varchar(max). 据我所知,这应该是存储2^31 - 1字符,但是当我输入超过 8000 个字符的内容时,它会切断其余部分。

我已经验证所有数据都包含在我的更新语句中,并且查询在其他地方看起来都很好,但是当我选择数据时,它已被切断。

当我在我的网站上显示数据以及使用 SSMS 到select content from table.

select DATALENGTH (content) from table 返回 8000。

我使用这个设置数据:update table set content = 'my long content' where id = 1。内容确实有很多 HTML,但我看不出这会导致问题。我唯一能看到的是我正在做的事情是替换所有内容"''因为这是用户输入的内容(不记得我现在为什么这样做了)。

我确实通过删除内容中的所有单引号设法使内容正确输入,所以我认为我的数据而不是数据库发生了一些奇怪的事情。

我应该对查询做一些特别的事情来使用一个varchar(max)字段吗?

使用:SQL Server 2008 (10.50) 64 位。

sql-server-2008 sql-server varchar

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

将单独的范围组合成最大可能的连续范围

我正在尝试组合多个日期范围(我的负载大约为最多 500 个,大多数情况下为 10 个),这些日期范围可能会或可能不会重叠到最大的可能连续日期范围中。例如:

数据:

CREATE TABLE test (
  id SERIAL PRIMARY KEY NOT NULL,
  range DATERANGE
);

INSERT INTO test (range) VALUES 
  (DATERANGE('2015-01-01', '2015-01-05')),
  (DATERANGE('2015-01-01', '2015-01-03')),
  (DATERANGE('2015-01-03', '2015-01-06')),
  (DATERANGE('2015-01-07', '2015-01-09')),
  (DATERANGE('2015-01-08', '2015-01-09')),
  (DATERANGE('2015-01-12', NULL)),
  (DATERANGE('2015-01-10', '2015-01-12')),
  (DATERANGE('2015-01-10', '2015-01-12'));
Run Code Online (Sandbox Code Playgroud)

表看起来像:

 id |          range
----+-------------------------
  1 | [2015-01-01,2015-01-05)
  2 | [2015-01-01,2015-01-03)
  3 | [2015-01-03,2015-01-06)
  4 | [2015-01-07,2015-01-09)
  5 | [2015-01-08,2015-01-09)
  6 | [2015-01-12,)
  7 | [2015-01-10,2015-01-12)
  8 | [2015-01-10,2015-01-12)
(8 rows)
Run Code Online (Sandbox Code Playgroud)

预期结果:

         combined
--------------------------
 [2015-01-01, 2015-01-06)
 [2015-01-07, 2015-01-09)
 [2015-01-10, ) …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate range-types

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

无法在 Mac 上本地导入 UTF-8 编码的 SQL 数据库

我正在将确认的 UTF-8 编码的 SQL 数据库导入 Mac 上的 Sequel Pro 并在中途抛出此错误:

读取文件时出错,因为无法以您选择的编码(自动检测 - Unicode (UTF-8))读取。

仅执行了 1273 个查询。

这是因为数据库文件最初来自 Windows 机器并且它的换行符塞满了东西吗?

我想即使我尝试通过文件传输将相同的数据库发送到服务器,我也会收到此错误,那么我该如何修复它的编码?

-- MySQL dump 10.13  Distrib 5.5.40-36.1, for Linux (x86_64)
--
-- Host: localhost    Database: *****
-- ------------------------------------------------------
-- Server version   5.5.40-36.1-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, …
Run Code Online (Sandbox Code Playgroud)

mysql mysqldump mac-os-x

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

在整个数据库中更改 GETDATE() 的使用

我需要将本地 SQL Server 2017 数据库迁移到 Azure SQL 数据库,但我面临着一些挑战,因为要克服很多限制。

特别是,由于 Azure SQL 数据库仅在 UTC 时间(无时区)下工作,而我们需要本地时间,因此我们必须更改数据库中GETDATE() 各处的使用,事实证明,这比我预期的要多。

我创建了一个用户定义的函数来获取适合我的时区的本地时间:

CREATE FUNCTION [dbo].[getlocaldate]()
RETURNS datetime
AS
BEGIN
    DECLARE @D datetimeoffset;
    SET @D = CONVERT(datetimeoffset, SYSDATETIMEOFFSET()) AT TIME ZONE 'Pacific SA Standard Time';
    RETURN(CONVERT(datetime,@D));
END
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是GETDATE()在每个视图、存储过程、计算列、默认值、其他约束等中实际更改此函数。

实施此更改的最佳方法是什么?

我们正处于托管实例的公共预览版中。它仍然有同样的问题GETDATE(),所以它对这个问题没有帮助。迁移到 Azure 是一项要求。这个数据库总是在这个时区使用(并将被使用)。

sql-server azure-sql-database sql-server-2017

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

如何潜入一个丑陋的数据库?

我相信你们中的许多人正在/正在处理一个丑陋的数据库。你知道,那个根本没有规范化的数据库,那个你必须进行大量痛苦的查询才能获得最琐碎的数据的数据库,那个正在生产中的数据库,你不能改变一点......你知道, “那个”。

我的问题是,如何处理的?

  • 你尝试创建一个新的数据库吗?
  • 你放弃并留下它吗?
  • 你能给出什么建议?

database-design

26
推荐指数
9
解决办法
3890
查看次数

授予文件系统访问 SQLSERVERAGENT 虚拟帐户的权限

我正在尝试NT Service\SQLSERVERAGENT根据此问题中的标记答案授予Windows 帐户文件系统访问权限。我相信这是一个虚拟服务帐户,它不会显示在控制面板 -> 用户帐户区域中。

如何授予此服务帐户访问文件系统的权限?具体来说,在 Windows 7 上。

我已经阅读了几种方法,但似乎没有一种方法适合我。我尝试了 PowerShell 方法,但 AD 命令不是有效命令。我什至下载并安装了这些命令所需的 Windows 补丁。我还了解到我应该能够通过 SQL Server 配置管理器或 Management Studio 执行此操作。不过,我似乎无法弄清楚在哪里调整这些权限。

SQL Server 代理进程无法启动,并显示以下错误消息:

Login failed for user 'NT SERVICE\SQLSERVERAGENT'.  
Reason: Failed to open the explicitly specified database 'msdb'.  
[CLIENT: <local machine>]
Run Code Online (Sandbox Code Playgroud)

根据我的谷歌搜索,它与此帐户的权限有关。

我不确定数据库是否已损坏,但它说数据库处于正常状态。SQL Server 代理登录是sysadminpublic组的一部分。

sql-server permissions sql-server-agent

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

由于“XTP_CHECKPOINT”,数据库“database_name”的事务日志已满

我有一个关于XTP_CHECKPOINT.

我使用的是 SQL Server 2014。我有一个处于 SIMPLE 恢复模式模式的数据库。它也在被复制。

没有未结交易。我跑了DBCC OPENTRAN,它返回:

“没有活跃的未结交易。”

但是每当我尝试创建或删除表或删除数据时,我都会收到此消息:(
我已将实际数据库名称替换为单词database_name

“由于 'XTP_CHECKPOINT',数据库 'database_name' 的事务日志已满”

有谁知道为什么会发生这种情况,更重要的是,我怎样才能让它停止?

是的,数据库确实处于 SIMPLE 恢复模式模式。即事务日志应自动截断。

顺便说一句,我在完全恢复模式下的另一个数据库做了同样的事情,开始返回相同的错误:

由于“XTP_CHECKPOINT”,数据库“database_name”的事务日志已满

我试图将日志增长设置更改为无限增长,但它不会让我返回相同的错误。

除了文件组之外,我可以在没有任何 XTP 内容的情况下重现该问题。方法如下:http : //pastebin.com/jWSiEU9U

sql-server transaction-log sql-server-2014 memory-optimized-tables

26
推荐指数
3
解决办法
2万
查看次数

将一列从 NOT NULL 更改为 NULL - 幕后发生了什么?

我们有一个包含 2.3B 行的表。我们想将一列从 NOT NULL 更改为 NULL。该列包含在一个索引中(不是聚集索引或 PK 索引)。数据类型没有改变(它是一个 INT)。只是可空性。声明如下:

Alter Table dbo.Workflow Alter Column LineId Int NULL
Run Code Online (Sandbox Code Playgroud)

该操作在我们停止之前需要超过 10 次(我们甚至还没有让它运行完成,因为它是一个阻塞操作并且花费的时间太长)。我们可能会将表复制到开发服务器以测试实际需要多长时间。但是,我很好奇是否有人知道 SQL Server 在从 NOT NULL 转换为 NULL 时在幕后做了什么?此外,受影响的索引是否需要重建?生成的查询计划并不表明发生了什么。

有问题的表是集群的(不是堆)。

sql-server sql-server-2008-r2 alter-table database-internals

26
推荐指数
2
解决办法
4万
查看次数

活动连接数和剩余连接数

我想获得有关一段时间内连接峰值数量的统计信息。

我知道这种pg_stat_activity观点,就像select count(*) from pg_stat_activity,但我认为这种方法不是很聪明。

是否有其他视图或表格可以提供我需要的信息?

postgresql monitoring

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