SQL SERVER – Tips from the SQL Joes 2 Pros Development Series – Introduction to Page Split – Day 20 of 35

From yesterdays post we learned that the clustered index is the placement order of a table’s records in memory pages. When you insert new records, then each record will be inserted into the memory page in the order it belongs.

Rick Morelan’s SSN (555-55-5555) belongs with the 5’s, so his record will be physically inserted in memory between Jonny Dirt and Sally Smith. Is there enough room in this page to accommodate his record without having to move other record(s) to a new page? Yes there is, and afterwards the first memory page is full. If you insert a new record(s), it is inserted into the memory page in the order it belongs.

Next, we have another new record coming in, Vince Verhoff. His record belongs in sequence after Irene Intern, so he will begin occupying the next page of memory.

The clustered index is the placement order of a table’s records in memory pages. When you insert new records, then each record will be inserted into the memory page in the order it belongs.

Page Splits

Page splits arise when records from one memory page are moved to another page during changes to your table. Here we see another new record (Major Disarray) being inserted, in sequence, between Jonny and Rick. Since there’s no room in this memory page, some records will need to shift around. The page split occurs when Irene’s record moves to the second page.

Page splits are considered very bad for performance, and there are a number of techniques to reduce, or even eliminate, the risk of page splits.

Next we’ll see this data entered into the HumanResources.Contractor table, which contains a clustered index on the SSN field.

Notice from the figure above that SSN is set as a primary key. A primary key is a constraint which ensures non-nullability and uniqueness (i.e., no duplicate values) in a field. Only one primary key per table is allowed. When you create a primary key, SQL Server creates two objects: the primary key and an index (which by default is clustered). The data in this table will be physically ordered by SSN. Now insert the first three records into the table.

Let’s use our same assumption that four records fit into a page of memory. These three records would all occupy the same memory page.

So that means there is room in the same memory page for an INSERT to add one additional record to this table, for a total of four records.

In our example, the first memory page is now full, since it contains four records. The second memory page is empty. The layout in the memory page is depicted with the fourth record (highlighted) added between Jonny Dirt and Sally Smith. The two bottom records (Sally Smith and Irene Intern) shifted down to make room for the “Rick Morelan” record to be inserted in proper sequence, according to the value of the clustered field (SSN).

The next insert (for Vince Verhoff – see figure below) goes straight into the second memory page and does not cause a page split. Now look at the SSN values in the table. Now the SSN value of the next record to be added will tell us whether there will be a page split. Any subsequent INSERT with an SSN value within the range 888-88-8889 through 999-99-9998 would go into one of the three available rows in the second memory page.

Any SSN value below 888-88-8888 will cause a page split. The 444-44-4444 Major Disarray value must be inserted in Page 1 between Jonny and Rick, a page split is caused and Irene Intern’s record must move to Page 2. Notice that it won’t take long before almost every insert causes a page split.

NOTE: Please note that this is Level 100 explanation and how the rows are ordered and B Trees are organized are out of the scope of this article.

NOTE1: This article is just a introduction and not a deep dive into the storage structure. Here is the MSDN page for complete reference.

Note: If you want to setup the sample JProCo database on your system you can watch this video. For this post you will want to run the SQLArchChapter4.2Setup.sql script from Volume 3.

Question 20

When do page splits happen?

When records from one memory page are moved to another page during changes to your table.

When records from one memory page are collapsed into fewer pages from excessive deletes.

When you insert records in order by the clustered index and you table needs to claim more memory space.

Rules:

Please leave your answer in comment section below with correct option, explanation and your country of resident.
Every day one winner will be announced from United States.
Every day one winner will be announced from India.A valid answer must contain country of residence of answerer.
Please check my facebook page for winners name and correct answer.
Winner from United States will get Joes 2 Pros Volume 3.
Winner from India will get Joes 2 Pros Volume 3.
The contest is open till next blog post shows up at http://blog.sqlauthority.com which is next day GTM+2.5.

Page splits are performed when there is no space in a data page to accommodate more inserts or updates. In a page spilt, SQL server removes some data from the current data page and moves it to another data page. This is done in order to make space for the new rows.

Answer: Option 1
When records from one memory page are moved to another page during changes to your table.

A page is 8Kb of data which can be related to an index, data, lob’s etc. When we INSERT data in a table, they go on a page (into slots). Based on row length, a number of rows can be stored on a 8kb page. If the row length increases (longer data value), SQL Server will move the other rows in the page to accommodate the change. If the page turns out to be small for all these rows, then SQL Server grabs another new page and moves rows to the left/right of the modification onto it. This is termed as a page split.

The correct answer is Option 1 (When records from one memory page are moved to another page during changes to your table.)

Point to be noted:
Page split occurs not only on INSERT operations, but also on DELETE and UPDATE operations (assuming Primary Key/ Key on which clustered index has been created is updated.) Hence, usage of the word “changes” is most appropriate.

Correct option is 1:
1.When records from one memory page are moved to another page during changes to your table.

The clustered index is the placement order of a table’s records in memory pages. When you insert new records, then each record will be inserted into the memory page in the order it belongs.
So when first memory page is now full the new inertted ecord will be placed in second memory page causing page split.

Page splits are performed when there is no space in a data page to accommodate more inserts or updates. In a page spilt, SQL server removes some data from the current data page and moves it to another data page. This is done in order to make space for the new rows.

When there is no space in a data page to accommodate any more inserts or updates, SQL server removes some data from the current data page and moves it to another data page in order to make space for the new rows. This process is nothing but termed as Page Split in Sql Server. So, Option # 1 is CORRECT, ie. “When records from one memory page are moved to another page during changes to your table.”

When there is no space in a data page to accommodate any more inserts or updates, SQL server removes some data from the current data page and moves it to another data page in order to make space for the new rows. This process is nothing but termed as Page Split in Sql Server. So, Option # 1 is CORRECT, ie. “When records from one memory page are moved to another page during changes to your table.”

When records from one memory page are moved to another page during changes to your table.

This happens when a page is full and an inserted record belongs between two existing records. This causes some records on page X to need to be shifted downward and to another page so that the newly inserted record will fit where it belongs in the clustered index sequence

When records from one memory page are moved to another page during changes to your table.

This is the correct answer.

Explanation:

what is a page split?

“Page Splits” signals the number page splits for data pages, clustered index pages, or non clustered index pages because there was not enough room for a new row(data inserted).

Explanation:

When a data row is inserted into the table with a clustered index, the row must be placed in physical order according to the key value (SSN as Explained) .

Index rows must also be placed in physical order on the pages. If there is not enough room on a page for a new row,SQL (Adaptive) Server splits the page, allocates a new page, and moves some rows to the new page.

Page splitting incurs overhead because it involves updating the parent index page and the page pointers on the adjoining pages and adds lock contention. For clustered indexes, page splitting also requires updating all nonclustered indexes that point to the rows on the new page.

Other Reasons why page split happens:

• A page split occurs when there is no enough space left to perform an INSERT in the available memory/space.
• In this case the SQL Server also needs to updae the indexes related to the queries depending on the page splits.
• The SQL Servers performance is affected if there are a lot of page splits.

The factors that affect the number of page splits are:
1. Number of users
2. Level of user activity
3. The frequency of the rebuild of indexes
4. The primary key being a clustered index
5. The performance of your I/O subsystem
6. Read or write operations
7. The fill-factor used in table indexes
• Performance Monitor can be used to watch the SQLServer:Access Methods:Page Splits/sec counter.
• Solution to reduce the number of page splits:
1. Increase the fillfactor on your indexes.
2. Rebuild your indexes more often.
3. Add clustered indexes to your monotonically increasing primary keys.
4. Get a faster I/O subsystem.

The correct answer is both 1) and 2).
Page splits arise when records from one memory page are moved to another page during changes in the table. Due to excessive delete record may need to be shifted to previous page ,as free space may arise in previous pages. For example suppose there are 10 records in Marketing_lead table with having ID 1 to 10 . Assuming 4 record in each memory page there will be 3 memory pages.
Now, if ID 3,6,7,8,9,10 is deleted then there will be vacant space in the first page containing record with ID 1,2,and 4. And the second page record with ID 5 will be shifted to the first page.

1.When records from one memory page are moved to another page during changes to your table.
2.When records from one memory page are collapsed into fewer pages from excessive deletes.
3.When you insert records in order by the clustered index and you table needs to claim more memory space.

Correct Answer:
The correct answer is choice #1: When records from one memory page are moved to another page during changes to your table.

Explanation:
A Page Split occurs when a page in memory is full and a record on that memory page must be moved to another memory page to make room for a new record that has a primary key (clustered index) value less than the value of the record to be moved (presuming your clustered index is sorted in ascending order).

Page splits happen when #1: When records from one memory page are moved to another page during changes to your table.
When a row is moved to a new page in order to keep the clustered index in order, a page split occur.
Matt Nelson, USA

Community Initiatives

About Pinal Dave

Pinal Dave is a Pluralsight Developer Evangelist. He has authored 11 SQL Server database books, 17 Pluralsight courses and have written over 3200 articles on the database technology on his blog at a http://blog.sqlauthority.com. Along with 11+ years of hands on experience he holds a Masters of Science degree and a number of certifications, including MCTS, MCDBA and MCAD (.NET). His past work experiences include Technology Evangelist at Microsoft and Sr. Consultant at SolidQ. Follow @pinaldave
Send Author Pinal Dave
an email at pinal@sqlauthority.com

Email Subscription

Enter your email address to subscribe to this blog and receive notifications of new posts by email.