رسول_57
دوشنبه 13 مهر 1394, 22:38 عصر
فشرده سازی اولیه جدول : با دقت این کار را انجام دهید !
(نوشته جان واتسون : برای مطالعه دیگر نوشته های وی به وبلاگ وی (http://www.orafaq.com/blog/17574) مراجعه نمایید . )
در تمامی نسخه های پایگاه داده اوراکل فشرده سازی اولیه جدول پوشش داده می شود و نسبت های فشرده سازی قابل انتظار را می توان به دست آورد . اما دقت داشته باشید که دستورات مدیریت داده ناشی از این عمل ممکن است فاجعه بار باشد . در واقع ، فشرده سازی اولیه (یا فشرده سازی اولیه در سطح ذخیره سازی سطری با استفاده از سینتکس فعلی ) فشرده سازی کاملی نمی باشد . این نوع فشرده سازی به معنای حذف موارد تکراری در بلاک های داده ای است . اگر یک جمله یکسان بیش از یک بار در بلاک تکرار گردد تنها یکبار ذخیره می گردد با توکن هایی که در صورت نیاز به آن جملات اشاره می کند . اگر بتوانید داده هایتان را اندازه گیری کنید میزان کاهش مورد نظرتان را بدست خواهید آورد . با استفاده از کدهای زیر می توان نسبتی بهتر از 1 به 4 را بدست آورد .
orclz>
orclz> create table t1 as select * from all_objects;
Table created.
orclz> select blocks from user_segments where segment_name='T1';
BLOCKS
----------
1664
orclz> drop table t1;
Table dropped.
orclz> create table t1 compress as select * from all_objects;
Table created.
orclz> select blocks from user_segments where segment_name='T1';
BLOCKS
----------
384
orclz>
اکنون تعدادی دستور مدیریت داده یا DML را اجرا می کنم ، که تغییرات خاصی را ایجاد نمی کند .
orclz> update t1 set owner=owner;
90631 rows updated.
orclz> select blocks from user_segments where segment_name='T1';
BLOCKS
----------
1792
orclz>
چه جالب ! البته فعلا به بحث کارایی نمی پردازیم (مقاله بعدی وبلاگ) . ایده ای بدست خواهید آورد که چه چیزی اشتباه است .
orclz>
orclz> @?\rdbms\admin\utlchain
Table created.
orclz> analyze table t1 list chained rows;
Table analyzed.
orclz> select count(*) from chained_rows;
COUNT(*)
----------
83755
orclz>
شما در مورد این موضوع چه فکر می کنید ! انگار تمامی سطرها مهاجرت کرده اند . به زودی در مقاله ای دیگر در مورد این موضوع بحث می کنیم .
(نوشته جان واتسون : برای مطالعه دیگر نوشته های وی به وبلاگ وی (http://www.orafaq.com/blog/17574) مراجعه نمایید . )
در تمامی نسخه های پایگاه داده اوراکل فشرده سازی اولیه جدول پوشش داده می شود و نسبت های فشرده سازی قابل انتظار را می توان به دست آورد . اما دقت داشته باشید که دستورات مدیریت داده ناشی از این عمل ممکن است فاجعه بار باشد . در واقع ، فشرده سازی اولیه (یا فشرده سازی اولیه در سطح ذخیره سازی سطری با استفاده از سینتکس فعلی ) فشرده سازی کاملی نمی باشد . این نوع فشرده سازی به معنای حذف موارد تکراری در بلاک های داده ای است . اگر یک جمله یکسان بیش از یک بار در بلاک تکرار گردد تنها یکبار ذخیره می گردد با توکن هایی که در صورت نیاز به آن جملات اشاره می کند . اگر بتوانید داده هایتان را اندازه گیری کنید میزان کاهش مورد نظرتان را بدست خواهید آورد . با استفاده از کدهای زیر می توان نسبتی بهتر از 1 به 4 را بدست آورد .
orclz>
orclz> create table t1 as select * from all_objects;
Table created.
orclz> select blocks from user_segments where segment_name='T1';
BLOCKS
----------
1664
orclz> drop table t1;
Table dropped.
orclz> create table t1 compress as select * from all_objects;
Table created.
orclz> select blocks from user_segments where segment_name='T1';
BLOCKS
----------
384
orclz>
اکنون تعدادی دستور مدیریت داده یا DML را اجرا می کنم ، که تغییرات خاصی را ایجاد نمی کند .
orclz> update t1 set owner=owner;
90631 rows updated.
orclz> select blocks from user_segments where segment_name='T1';
BLOCKS
----------
1792
orclz>
چه جالب ! البته فعلا به بحث کارایی نمی پردازیم (مقاله بعدی وبلاگ) . ایده ای بدست خواهید آورد که چه چیزی اشتباه است .
orclz>
orclz> @?\rdbms\admin\utlchain
Table created.
orclz> analyze table t1 list chained rows;
Table analyzed.
orclz> select count(*) from chained_rows;
COUNT(*)
----------
83755
orclz>
شما در مورد این موضوع چه فکر می کنید ! انگار تمامی سطرها مهاجرت کرده اند . به زودی در مقاله ای دیگر در مورد این موضوع بحث می کنیم .