Row fragmentation was always a thing you needed to think about when choosing char/varchar2 data types for table columns, issuing batch deletes/inserts/updates on the tables because Oracle tries to fit new data into opened free spaces and so fragmentation might start to slow down the performance at some time. Now everything has changed with the flash storage disks, because the data is written as much fragmented as possible due to flash technology itself. If we don't need take care about fragmentation then it breaks the whole understanding about table data storage issues and data fragmentation. Does anyone have experience with storing database files on flash storage disks? Does the fragmentation issue is gone with ssd disks?
Do we still need to worry about row fragmentation when using flash disk storage?
584 Views Asked by Centurion At
1
There are 1 best solutions below
Related Questions in ORACLE
- Add additional fields to Linq group by
- couldn't copy pdb file to another directory while consuming wcf web service
- Why are the aliases for string and object in lowercase?
- WPF MessageBox Cancel checkbox check
- Resolve object using DI container with object instance
- Creating a parametrized field name for a SELECT clause
- Does compiler optimize operation on const variable and literal const number?
- Get data from one form to another form in C#
- Writing/Overwriting to specific XML file from ASP.NET code behind
- Deleting Orphans with Fluent NHibernate
Related Questions in FRAGMENTATION
- Add additional fields to Linq group by
- couldn't copy pdb file to another directory while consuming wcf web service
- Why are the aliases for string and object in lowercase?
- WPF MessageBox Cancel checkbox check
- Resolve object using DI container with object instance
- Creating a parametrized field name for a SELECT clause
- Does compiler optimize operation on const variable and literal const number?
- Get data from one form to another form in C#
- Writing/Overwriting to specific XML file from ASP.NET code behind
- Deleting Orphans with Fluent NHibernate
Related Questions in SOLID-STATE-DRIVE
- Add additional fields to Linq group by
- couldn't copy pdb file to another directory while consuming wcf web service
- Why are the aliases for string and object in lowercase?
- WPF MessageBox Cancel checkbox check
- Resolve object using DI container with object instance
- Creating a parametrized field name for a SELECT clause
- Does compiler optimize operation on const variable and literal const number?
- Get data from one form to another form in C#
- Writing/Overwriting to specific XML file from ASP.NET code behind
- Deleting Orphans with Fluent NHibernate
Related Questions in DATABASE-FRAGMENTATION
- Add additional fields to Linq group by
- couldn't copy pdb file to another directory while consuming wcf web service
- Why are the aliases for string and object in lowercase?
- WPF MessageBox Cancel checkbox check
- Resolve object using DI container with object instance
- Creating a parametrized field name for a SELECT clause
- Does compiler optimize operation on const variable and literal const number?
- Get data from one form to another form in C#
- Writing/Overwriting to specific XML file from ASP.NET code behind
- Deleting Orphans with Fluent NHibernate
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
There is no such thing as "row fragmentation" as you describe it and, realistically, that should never drive your choice of
char
orvarchar2
data types. Your choice of data type should depend on the nature of the data and whether it is really fixed width or variable width. 99.9% of the time, you should prefervarchar2
.The smallest unit of I/O Oracle can possibly read or write is a block. A block is generally 8k (though it can be as small as 2k or as large as 32k). A block will generally store data for multiple rows. Since Oracle has to write the entire block every time, it doesn't matter if it has to move data around within a block.
Within a block, Oracle reserves a certain amount of space for future growth. This is controlled by the
PCTFREE
setting of the table. If you expect that your rows will grow substantially over time, you'd use a largePCTFREE
. If you expect that your rows will be static in size over time, you'd use a smallPCTFREE
. You wouldn't want to adjust your data types to prevent rows from changing in size, you'd want to adjust the table'sPCTFREE
to be appropriate for whatever changes you expect.If Oracle runs out of space on a block for a particular row (for example, if the row needs to grow and the
PCTFREE
was set too small), Oracle needs to migrate the row to a new block. That means that it leaves a pointer in the original block that points to the new block and moves the actual data to the new block. This can create performance issues since you now have to visit the old block and the new block to read the row if you're reading from the index depending on what fraction of the rows in the table are migrated. You can also get issues with chained rows if you have rows that are larger than your blocks or rows that have more than 255 columns which force Oracle to do additional I/O but those don't seem to be what you're concerned about here.Regardless of the storage system, you want to set the
PCTFREE
of your table appropriately so that you minimize the amount of row migration that takes place over time (there are other ways to minimize row migration in some corner cases but 99% of the time you really just want to set thePCTFREE
correctly). Use the appropriate data types for the data that you're trying to store, don't let concern about row migration influence your choice of data types.