服务器 (SQL Server 2008) 的 tempdb 每月数次增加到 500GB+。是否可以找出导致此问题的 SQL 语句?问题通常不是由create table #temp...; insert into #temp...或select ... into #temp...复杂的连接引起的。
某些 tempdb 文件的初始大小每次也会自动设置为更大的值。如何预防?
有时缓存的计划会阻止调整/缩小文件的大小。如何找到哪一个持有tempdb?
我有一个字段来存储一些数据,该字段声明为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 位。
我正在尝试组合多个日期范围(我的负载大约为最多 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) 我正在将确认的 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) 我需要将本地 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 是一项要求。这个数据库总是在这个时区使用(并将被使用)。
我相信你们中的许多人正在/正在处理一个丑陋的数据库。你知道,那个根本没有规范化的数据库,那个你必须进行大量痛苦的查询才能获得最琐碎的数据的数据库,那个正在生产中的数据库,你不能改变一点......你知道, “那个”。
我的问题是,你是如何处理的?
我正在尝试NT Service\SQLSERVERAGENT根据此问题中的标记答案授予Windows 帐户文件系统访问权限。我相信这是一个虚拟服务帐户,它不会显示在控制面板 -> 用户帐户区域中。
如何授予此服务帐户访问文件系统的权限?具体来说,在 Windows 7 上。
我已经阅读了几种方法,但似乎没有一种方法适合我。我尝试了 PowerShell 方法,但 AD 命令不是有效命令。我什至下载并安装了这些命令所需的 Windows 补丁。我还了解到我应该能够通过 SQL Server 配置管理器或 Management Studio 执行此操作。不过,我似乎无法弄清楚在哪里调整这些权限。
SQL Server 代理进程无法启动,并显示以下错误消息:
Run Code Online (Sandbox Code Playgroud)Login failed for user 'NT SERVICE\SQLSERVERAGENT'. Reason: Failed to open the explicitly specified database 'msdb'. [CLIENT: <local machine>]
根据我的谷歌搜索,它与此帐户的权限有关。
我不确定数据库是否已损坏,但它说数据库处于正常状态。SQL Server 代理登录是sysadmin和public组的一部分。
我有一个关于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
我们有一个包含 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
我想获得有关一段时间内连接峰值数量的统计信息。
我知道这种pg_stat_activity观点,就像select count(*) from pg_stat_activity,但我认为这种方法不是很聪明。
是否有其他视图或表格可以提供我需要的信息?
sql-server ×6
postgresql ×2
aggregate ×1
alter-table ×1
mac-os-x ×1
monitoring ×1
mysql ×1
mysqldump ×1
permissions ×1
range-types ×1
tempdb ×1
varchar ×1