求高手给力的解释--关于数据文件

Kandy 2011-08-24 01:14:07
在用SQL进行的生产环境中,单个数据库主文件MDF已经到达20多G,考虑进行文件分组管理,测试机用备份恢复一个实例,在管理界面中随意建立了几个文件组和一些测试文件,并且更改了默认数据组,在做完操作确定的瞬间数据文件的分布发生了改变,结果如下:
---------------------------------------------
HO_DATA E:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\HO_0621.MDF
640 64000 PRIMARY 0
menzhen E:\menzhen.ndf 1024 10 menzhen 0
test1 E:\test1.ndf 5120 10 PRIMARY 0
test2 E:\test2.ndf 5120 10 PRIMARY 0
test3 E:\test3.ndf 5120 10 PRIMARY 0
test4 E:\test4.ndf 5120 10 PRIMARY 0
test5 E:\test5.ndf 5120 10 PRIMARY 0
test6 E:\test6.ndf 5120 10 test 1
goo E:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\goo.ndf
0 10 gg 0
--------------------------------------------------
从上边的数据可以看出,主文件从原来的20多G变成了600多M,而其他建立的5G大小的PRIMARY和TEST文件组中的文件基本平均分布了数据,按照单个文件收缩看了一下,每个数据文件均占用了80%左右的空间.
按照MS的官方解释,如果在数据库中创建对象时没有指定对象所属的文件组,对象将被分配给默认文件组。不管何时,只能将一个文件组指定为默认文件组。默认文件组中的文件必须足够大,能够容纳未分配给其他文件组的所有新对象。PRIMARY 文件组是默认文件组,除非使用 ALTER DATABASE 语句进行了更改。但系统对象和表仍然分配给 PRIMARY 文件组,而不是新的默认文件组。
很明显的,在上边的测试结果中主数据文件的大小发生了改变,但应该不是所谓的只有系统对象和表,因为系统对象和表是分配给PRIMARY文件组的,奇怪的是数据为什么看起来似乎是平均得分配到了每个数据文件中,而且在随后的测试中仿照之前的操作步骤对另外恢复的数据库无论如何都没有重现这种测试结果.
在上边的测试结果操作的过程中并未进行DBCC SHRINKFILE(XX,EMPTYFILE)之类的操作,但这种情况为什么会发生,怎么发生的?因为这种情况恰恰是解决单个数据文件过大,提高IO及并行操作的解决方案,在生产环境中并没有时间去等待进行DBCC SHRINKFILE(XX,EMPTYFILE)之类的操作,也不大现实去在生产中移动一些表到不同的数据文件并且重建索引等操作.

求解!
...全文
147 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kandy 2011-08-31
  • 打赏
  • 举报
回复
结贴,找到原因,虽然仍然得靠自己但混分者可怜,见者有份
Kandy 2011-08-25
  • 打赏
  • 举报
回复
库原始数据如下(已将大小列转换成M,请与主楼变化后的结果数据对比):
-----------------------------------------------------
name physical_name (无列名) growth filegroup is_default
HO_DATA E:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\HO_0621.MDF
24008 25600 PRIMARY 1
menzhen E:\menzhen.ndf 1024 10 menzhen 0
-----------------------------------------------------
差别的数据组和数据文件主楼数据也可看出,继续等待高手给出可能的解释
nzperfect 2011-08-25
  • 打赏
  • 举报
回复
凉快去了~ 您继续
huaxl342308 2011-08-25
  • 打赏
  • 举报
回复
唉!才疏学浅哦!!!看的吃力
Kandy 2011-08-25
  • 打赏
  • 举报
回复
没人要求是你必须给出解释,你如果不看数据就乱解释可以一边凉快~
Kandy 2011-08-25
  • 打赏
  • 举报
回复
那你不会看主楼上的数据?怎么会错?
nzperfect 2011-08-25
  • 打赏
  • 举报
回复
你都没法重现,为什么不怀疑自己看错了?
Kandy 2011-08-25
  • 打赏
  • 举报
回复
发生了表明是在特定的条件或者因素下会出现,而不能重现说明我忽略了什么,现在就是想知道什么情况下能导致这样的结果,而这种结果正是想要的~
nzperfect 2011-08-25
  • 打赏
  • 举报
回复
你都无法重现。。。
Kandy 2011-08-25
  • 打赏
  • 举报
回复
当然要深究了,因为这恰好是我想要的结果,平均分布了数据文件对于大型生产业务IO平均负载和并行处理有很大的好处~继续求解释!
nzperfect 2011-08-25
  • 打赏
  • 举报
回复
确实发生了,并且我却无法再重现
无解了。理论上不会出现你说的情况,灵异了。不必深究了
Kandy 2011-08-25
  • 打赏
  • 举报
回复
忘记提示:环境为WINDOWS2008+SQL 2008
Kandy 2011-08-25
  • 打赏
  • 举报
回复
2楼说得不大可能,但他确实发生了,并且我却无法再重现这种过程,刚开始数据文件发生的改变我以为是添加了文件组并指定为默认后必然会发生这种改变,但再做测试却并无这种变化,因此我感到非常疑惑特此提问,3楼,增加数据文件必然属于文件组,默认是PRIMARY,还在疑惑中,求可能的解释!
--小F-- 2011-08-24
  • 打赏
  • 举报
回复
你增加数据的时候没有指定文件组么?
nzperfect 2011-08-24
  • 打赏
  • 举报
回复
你的意思是指仅仅添加了新文件组,原来的mdf就会从20G变成600M?这不太可能吧

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧