Question regarding datafiles

  • Hi,

    Its a generic question regarding datafiles:

    Syntax of creating a table is as follows (From BOL):

    CREATE TABLE

    [ database_name.[ owner ] . | owner. ] table_name

    ( {

    | column_name AS computed_column_expression

    | ::= [ CONSTRAINT constraint_name ] }

    | [ { PRIMARY KEY | UNIQUE } [ ,...n ]

    )

    [ ON { filegroup | DEFAULT } ]

    [ TEXTIMAGE_ON { filegroup | DEFAULT } ]

    If a filegroup has more than one datafile, and I want to create the table in that filegroup, how does SQL Server decide which datafile to create the table in?

    Pls advise.

    Regards,

    RSingh

  • I'm pretty sure that if you don't specify a filegroup then it puts it in whatever you've specified as the default filegroup.

  • It really doesn't decide to put it in a datafile. Rather than me typing all this out, the following is from BOL and explains things pretty well;

    Filegroups use a proportional fill strategy across all the files within each filegroup. As data is written to the filegroup, the SQL Server Database Engine writes an amount proportional to the free space in the file to each file within the filegroup, instead of writing all the data to the first file until full. It then writes to the next file. For example, if file f1 has 100 MB free and file f2 has 200 MB free, one extent is allocated from file f1, two extents from file f2, and so on. In this way, both files become full at about the same time, and simple striping is achieved.

    As soon as all the files in a filegroup are full, the Database Engine automatically expands one file at a time in a round-robin manner to allow for more data, provided that the database is set to grow automatically. For example, a filegroup is made up of three files, all set to automatically grow. When space in all the files in the filegroup is exhausted, only the first file is expanded. When the first file is full and no more data can be written to the filegroup, the second file is expanded. When the second file is full and no more data can be written to the filegroup, the third file is expanded. If the third file becomes full and no more data can be written to the filegroup, the first file is expanded again, and so on.

    --End of inclusion

    Hope this helps.

    David

    @SQLTentmaker

    “He is no fool who gives what he cannot keep to gain that which he cannot lose” - Jim Elliot

  • oops, better than my answer. Guess I misread the question a bit.

  • DavidB (2/17/2009)


    It really doesn't decide to put it in a datafile. Rather than me typing all this out, the following is from BOL and explains things pretty well;

    Filegroups use a proportional fill strategy across all the files within each filegroup. As data is written to the filegroup, the SQL Server Database Engine writes an amount proportional to the free space in the file to each file within the filegroup, instead of writing all the data to the first file until full. It then writes to the next file. For example, if file f1 has 100 MB free and file f2 has 200 MB free, one extent is allocated from file f1, two extents from file f2, and so on. In this way, both files become full at about the same time, and simple striping is achieved.

    As soon as all the files in a filegroup are full, the Database Engine automatically expands one file at a time in a round-robin manner to allow for more data, provided that the database is set to grow automatically. For example, a filegroup is made up of three files, all set to automatically grow. When space in all the files in the filegroup is exhausted, only the first file is expanded. When the first file is full and no more data can be written to the filegroup, the second file is expanded. When the second file is full and no more data can be written to the filegroup, the third file is expanded. If the third file becomes full and no more data can be written to the filegroup, the first file is expanded again, and so on.

    --End of inclusion

    Hope this helps.

    Thanks a ton David !!!

    This was really helpful.

Viewing 5 posts - 1 through 4 (of 4 total)

You must be logged in to reply to this topic. Login to reply