自从我使用SQL和C#.NET以来已经好几年了,所以请保持温和。
我跳进去协助一个同事正在建设的项目。虽然看起来很糟糕。
我试图提供数据库中特定表的直接报告。它上次检查时有9列和大约1.6M行。这很大,但它不足以产生问题。但是,当我使用MS SQL Server Management Studio运行简单查询时,需要11秒。
SELECT *
FROM [4.0Analytics].[dbo].[Measurement]
where VIN = 'JTHBJ46G482271076';
我尝试为VIN创建一个索引,但它超时了。 "执行Transact-SQL语句或批处理时发生异常。" "无法为对象分配空间' X'在dabase'你的数据库'因为' PRIMARY'文件组已满#34;
然而,似乎它应该花费更少的时间在第一个位置甚至没有索引,所以我想找出那里可能有什么问题然后接下来的索引超时。除非非索引的简单查询11秒是正常的吗?答案 0 :(得分:2)
正如David Gugg所说,你的数据库中没有足够的空间。
检查主文件所在的磁盘上是否有足够的空间。如果磁盘上有足够的空间,请使用以下命令,然后尝试创建索引
USE [master]
GO
ALTER DATABASE [4.0Analytics]
MODIFY FILE ( NAME = N'Primary_File_Name'
, MAXSIZE = UNLIMITED
, FILEGROWTH = 10%
)
GO
-- This will allow your database to grow automatically if it runs out of space
-- provided you have space left on the disk
-- Now try to create the Index and it should let you create it.
SELECT *
花了太长时间。难怪你在表上放了多少索引如果你正在进行SELECT *
,如果你在表上定义了主键,那么它总是会产生Clustered Index Scan
,否则就是表扫描。
Try `Select <Column Names>` --<-- Only the columns you actually need
答案 1 :(得分:1)
我不建议将数据文件Autogruth设置为百分比[%],它更好 (最佳实践)将其设置为MB增长,例如:
USE [master] GO
ALTER DATABASE [YourDataBaseName] MODIFY FILE(NAME = N'YouDataBaseFileName', FILEGROWTH = 10240KB, MAXSIZE =无限制) GO
在索引创建过程中出现的错误是因为索引没有扩展能力。(因为参数MAXSIZE设置为LIMIT值)。
检查一下你可以做到: 一个。对象资源管理器&gt;&gt;&gt;数据库&gt;&gt;&gt;右键单击请求的数据库&gt;&gt;&gt;转到TAB“文件”。 b.T-SQL:
选择 FILE_NAME(e.file_id)为[FileName], e.growth, e.max_size, e.is_percent_growth 从sys.master_files e OBJECT_NAME(e.database_id)='YourDatabaseName'的位置 GO