我有一个包含 NVarChar(Max) 类型列的表。
在允许用户添加数据之前我没有采取很好的预防措施,所以现在我有超过 25 亿行,并且数据库变得超级大。
我正在尝试更改列以将大小更改为固定长度,其中应删除记录 > 该宽度。
这不是索引列。
我尝试过 LEN(Text)>width 但这是一个非常慢的函数,因为它会扫描数十亿行。
我们后来还尝试通过创建一个新表并将数据移到那里来将 Int 更改为 BigInt,但这需要一周左右的时间。
Alter Column 会冻结系统。
您能否提出任何其他方式或建议您认为最好的方法?
数据库托管在 Azure SQL 上
非常感谢 :)
我正在尝试在 Azure SQL 数据库上重建大表 (77GB) 的聚集索引。表上有高并发事务活动,因此我正在使用该ONLINE=ON选项。
这对于较小的表很有效;但是,当我在这个大表上运行它时,它似乎在表上使用了排他锁。我不得不在 5 分钟后停止它,因为所有事务活动都超时了。
来自 SPID 199 的会话:
ALTER INDEX PK_Customer ON [br].[Customer]
REBUILD WITH (ONLINE = ON, RESUMABLE = ON);
Run Code Online (Sandbox Code Playgroud)
从另一个会话:
在相同的结果中更进一步:
我知道在线重建可以在过程开始和结束时锁定“短”持续时间。但是,这些锁定会持续几分钟,这并不完全是“短”持续时间。
在重建运行时,我运行了SELECT * FROM sys.index_resumable_operations;但它返回了 0 行,就好像重建根本没有开始一样。
较小的表也有一个可能大于 900 字节的 PK,并且相同的ALTER语句在没有任何长时间阻塞的情况下工作,所以我认为它与 PK 大小无关。这些较小的表也有相似数量的nvarchar(max)列。我能想到的唯一真正的区别是这个表有更多的行。
这是 的完整定义br.Customer。没有外键或非聚集索引。
CREATE TABLE [br].[Customer](
[Id] [bigint] NOT NULL,
[ShopId] [nvarchar](450) NOT NULL,
[accepts_marketing] [bit] NOT NULL,
[address1] [nvarchar](max) MASKED WITH …Run Code Online (Sandbox Code Playgroud) sql-server clustered-index azure-sql-database index-maintenance online-operations
我有一个大型 SQL Azure 数据库(P6 大小接近 1TB)。我想清理/删除任何未使用的索引。在过去的 30 天里,我们捕获了以下 2 组信息。
参见:https : //gist.github.com/eoincampbell/3fe775d43e86ad342f9c6eba10f350f9
sys.dm_db_index_physical_statsjoin 到收集的索引统计数据sys.tables,sys.schemas以及sys.indexessys.dm_db_index_usage_stats我对sys.dm_db_index_usage_stats. 从文档中不清楚何时/是否在 SQL Azure 环境中发生以下情况(与单实例 MSSQLServer 相比)。
https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-db-index-usage-stats-transact-sql?view=azuresqldb-current的每当 SQL Server (MSSQLSERVER) 服务启动时,计数器都会初始化为空。此外,无论何时分离或关闭数据库(例如,因为 AUTO_CLOSE 设置为 ON),与该数据库关联的所有行都将被删除。
这是我用于随后识别未使用索引的查询。它
返回的总行数约为 219 行
这种方法看起来有效吗?
WITH MostRecentStats (
SchemaName, TableName, IndexName, IndexType, AllocUnitType, Pages, MostRecentAt
)
AS (
SELECT SchemaName, TableName, IndexName
, IndexTypeDescription, AllocUnitTypeDescription
, Max(PageCount) , …Run Code Online (Sandbox Code Playgroud) index sql-server database-size azure-sql-database index-maintenance
目前,在发布我们应用程序的新主要或次要版本后,我们复制生产数据库并执行以下过程:
这样做的目的是确保我们所有的环境尽可能彼此接近。这最初是一个手动过程,但由于越来越复杂,我们已经开始将其自动化。
但是,自动化这样的部署后过程的最佳方法是什么?我们目前的自动化是一个定制的 c# 程序 - 但是,SSIS 包是否更合适?或者是否有适合这项工作的工具?
我们使用的是 SQL Azure Premium P1,它带有 8GB 内存和 150 IOPS。几个小时以来,我们一直看到 SQL 查询超时(即使是相当简单的查询也需要时间)。
在 SQL Azure 的日志中,我们看到我们的物理读取 IOPS 在几分钟内从稳定的 5 IOPS 增加到大约 130,但我们在依赖 SQL Azure 的系统中的实际生产并没有增加。
在它跳到 130 IOPS 的那一刻,日志显示数据库内存使用量从非常稳定的 4.8GB 下降到 1GB 左右
我认为如果内存使用量下降,物理读取量增加是有道理的。
我查看了在服务器上执行的查询,但除了较慢的响应之外,没有发现任何异常。
我的问题是,即使有足够的内存可用,SQL Azure(或与此相关的 SQL 服务器)是否会从内存中删除内容并支持磁盘 IO,是否有任何原因。
我正在使用 SQL Server 2012 并使用 Ola Hallengren 备份脚本备份到 Azure Blob。
一些备份是租用锁定的(例如模型),而其他备份则不是(例如 msdb)。它是不一致的,反之亦然,完全锁定或解锁。
为什么备份被租用锁定?我如何将它们全部解锁?
我想将本地 SQL 数据库传输到 Microsoft Azure。db中存储了文件,因此db大小约为300MB。
在 SQL Server Management Studio 中,我尝试了以下操作:
任务->生成脚本
我能够创建.sql脚本但无法加载它。
我也试过
任务->将数据库部署到 SQL Azure...
但大约 30 分钟后,它崩溃了。
有任何想法吗?
当我从 sql server management studio 导出 sql azure 数据库作为数据层应用程序时,我可以选择勾选某些表,但这些表不包含在结果文件中。
我想导出这些表模式,但忽略它们的数据(本质上是导入空表)。对于所有其他表,我也想要数据。
有可能这样做吗?
我们数据库的 sysdatabases 和 sys.databases 中的数据库 ID 是 4。
函数 DB_ID ( '<our database>' ) 为我们的数据库返回 5。此外,表 sys.dm_db_missing_index_details 中我们数据库的任何缺失索引数据也分配给 database_id 5。
在我看来,sys.databases 的 ID 应该是 5 而不是4。这让我很抓狂,让 sp_BlitzIndex 不起作用。
有谁知道为什么我的数据库 ID 在 SQL Azure 上的 sys.databases、sys.dm_db_missing_index_details 和 DB_ID() 之间不匹配?它真的搞砸了还是在 SQL Azure 中工作不同?
我可以使用哪些查询来列出 SQL Azure 中服务器和数据库的所有登录信息?
我试过跑步,select * from sys.sysusers但我猜这只是向用户展示