Default Index Fill Factor

  • So me and my counter part (him being around this game much longer than I) have noticed and read in BOL that the system default for a server's index fill factor is 0 which is fine. We now know we need to change this when creating a new server. But both him and I remember hearing and reading and even being taught in classes that the default index fill factor is 80%. I am wondering if this changed at some point in time and we missed it?

    I know that a lot of people recommend a default of around 80% depending on table usage. but we know have a lot of indexes that have a fill factor of 0 going back almost 10 years because it was thought that the default was 80% not 100%. We looked at BOL and it says that 0 is 100 going back to SQL Server 2000. We cannot remember the material that we read and learned this from (it has been a while). Anyone in the same boat as us?

  • Hi

    cant speak for SQL 6.x or 7 but certainly from 2000 on the default of 0 is 100% thats what i have understood and read.

    Yes you probably want to change this but test first

    -----------------------------------------------------------------------------------------------------------

    "Ya can't make an omelette without breaking just a few eggs" 😉

  • Default is 0, which is the same as 100. Pages filled to capacity.

    CREATE INDEX - http://msdn.microsoft.com/en-us/library/ms188783.aspx

  • I wouldn't say a default of 80% is good - nor would I say one of 90% or any other value. There are definitely some tables in your system that should use a default of 0 (100%), while others should be set at a different value.

    What that value is going to be should be determined by the activity on that table and not some default value.

    If the table is only inserted into and never updated, with a monotonically increasing value as the cluster key - filliing it 100% is valid (and probably the best).

    On the other hand, if your table is updated frequently where values change a lot on varchar columns (causing data to be moved) and/or deleted from frequently you would want to set the fillfactor. In these cases, the goal is to reduce how fast the table fragments and how often you have to re-organize or rebuild the indexes.

    If your system is not 24x7 and you have the time to rebuild your indexes every night - then a higher fillfactor could be appropriate. Again, depending upon the activity for that table.

    Jeffrey Williams
    “We are all faced with a series of great opportunities brilliantly disguised as impossible situations.”

    ― Charles R. Swindoll

    How to post questions to get better answers faster
    Managing Transaction Logs

  • The default is 0. Your instructor might have set it to 80 for their purposes.

    No single default fill factor is appropriate for all indexes. It should be evaluated case by case.

    Jason...AKA CirqueDeSQLeil
    _______________________________________________
    I have given a name to my pain...MCM SQL Server, MVP
    SQL RNNR
    Posting Performance Based Questions - Gail Shaw[/url]
    Learn Extended Events

  • Maybe everyone has misunderstood my post. I know how to figure out what fill factor to use for different tables. I know that 0 is the same as 100.

    I am saying that we were somehow somewhere given the impression that the system default that a server starts with out of the box was a fill factor of 80%. Maybe my instructors were only use to earlier versions or something.

    I am looking to find out if anyone knew if the system default was at some point in time or some older version or even some other platform has or had a system default fill factor of 80% that we may have gotten confused with.

    Thanks guys.

  • From the 6.5 servers I administered through the 2008 servers that I administer, the default for fill factor was 0. I don't know where your instructor got their information - but I believe they were giving you information based on a setup they had - not the SQL Server defaults.

    Jason...AKA CirqueDeSQLeil
    _______________________________________________
    I have given a name to my pain...MCM SQL Server, MVP
    SQL RNNR
    Posting Performance Based Questions - Gail Shaw[/url]
    Learn Extended Events

  • DBA_Dom (4/2/2010)[hrI am saying that we were somehow somewhere given the impression that the system default that a server starts with out of the box was a fill factor of 80%. Maybe my instructors were only use to earlier versions or something.

    The default fill factor ('out of the box') has been zero since at least SQL Server 6.5

    The most likely explanation here is that the sever-wide default had been changed to 80 using sp_configure at some point.

  • I believe Paul and Jason are correct. I've been working with the product since v4.2, and while I don't remember it there, I believe from v6.0 on, it was always 0.

  • I used to think the default fillfactor was 90% too. Now I realize why I believed so...It's because when I used to create the Reorganize (reindex) Maintenance job that there was a default option to "Change free space per page percentage to: 10"

  • SQLRNNR (4/2/2010)


    No single default fill factor is appropriate for all indexes. It should be evaluated case by case.

    True; but it's our job as administrators to deliberate on the best default, which will kick in when someone creates an index and does not evaluate their particular case! Not uncommon in smaller shops.

    The default is 0, which translates to 100%. In my area, the idea of a 100% fill factor as a default is... substandard. More often than not in my area, an index is not on columns that are continually increasing and never changed; it's on data that is either inserted in nonindex (usually arbitrary) order, or is updated regularly. In both of these cases, a 100% fill factor results in quick fragmentation, and the index taking up more space than it would have at a smaller fill factor.

    How much below 100% as a default, though... that's a much, much more difficult question. For large tables with non-repeating but arbitrarily ordered data (person or object or paperwork ID numbers out of its home tables, etc.), a high fill factor is fine; you're going to be doing a few inserts/changes to a large number of scattered changes, and even a little bit of space free prevents the vast majority of page splits... unless you have queries that operate on clusters of index columns.

  • a few years old now- but I was wondering the same. 100 means 100% but what 0 meant I think has changed. Certainly back in the early Sybase days I think that 0 meant (something like) 100% for clustered, 80% for non-clustered (or the other way around) - this was something "built in" as a default. Not sure if SQL Server was the same and/or if Sybase has now changed it, but I guess that's the core of the original posters question and something I was wondering myself...

  • I used to think the default Fill Factor was 80%. But I believe I thought that because I used to use Erwin heavily back then, and I THINK their default was 80% FF (or we set it that way for Erwin default FF)....

Viewing 13 posts - 1 through 12 (of 12 total)

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