MYISAMPACK(1) MariaDB Database System MYISAMPACK(1) نام (NAME) myisampack - تولید جدول‌های فشرده و فقط‌خواندنی MyISAM خلاصه دستور (SYNOPSIS) myisampack [options] file_name ... توضیحات (DESCRIPTION) ابزار myisampack جدول‌های MyISAM را فشرده می‌کند. myisampack با فشرده‌سازی جداگانهٔ هر ستون جدول کار می‌کند. معمولاً myisampack فایل داده را بین ۴۰%–۷۰% فشرده‌سازی می‌کند. هنگامی که جدول بعداً استفاده می‌شود، سرور اطلاعات مورد نیاز برای از فشرده‌سازی خارج کردن ستون‌ها را در حافظه بارگذاری می‌کند. این امر منجر به عملکرد بسیار بهتری در هنگام دسترسی به ردیف‌های منفرد می‌شود، چرا که تنها کافی است دقیقاً یک ردیف از حالت فشرده خارج شود. سیستم MariaDB در صورت امکان از mmap() برای انجام نگاشت حافظه روی جدول‌های فشرده استفاده می‌کند. اگر mmap() کار نکند، MariaDB به عملیات معمول خواندن/نوشتن فایل بازمی‌گردد. لطفاً به موارد زیر توجه داشته باشید: • اگر سرور mariadbd با غیرفعال بودن قفل‌گذاری خارجی (external locking) اجرا شده باشد، اجرای myisampack در صورتی که ممکن است جدول در طول فرایند فشرده‌سازی توسط سرور به‌روزرسانی شود، ایدهٔ مناسبی نیست. امن‌ترین روش، فشرده‌سازی جدول‌ها در زمان متوقف بودن سرور است. • پس از فشرده‌سازی یک جدول، آن جدول فقط‌خواندنی می‌شود. به‌طور کلی این موضوع هدف اصلی است (مانند دسترسی به جدول‌های فشرده روی یک CD). دستور myisampack را به این صورت اجرا کنید: shell> myisampack [options] file_name ... هر آرگومان نام فایل باید نام یک فایل ایندکس (.MYI) باشد. اگر در دایرکتوری پایگاه داده نیستید، باید مسیر منتهی به فایل را مشخص کنید. حذف پسوند .MYI مجاز است. پس از اینکه جدولی را با myisampack فشرده کردید، باید از myisamchk -rq برای بازسازی ایندکس‌های آن استفاده کنید؛ به myisamchk(1) مراجعه کنید. ابزار myisampack از گزینه‌های زیر پشتیبانی می‌کند. همچنین فایل‌های گزینه را خوانده و از گزینه‌های پردازش آن‌ها که در بخش 4.2.3.3.1، “Command-Line Options that Affect Option-File Handling” توضیح داده شده است پشتیبانی می‌کند. • --help, -? نمایش یک پیام راهنما و خروج. • --backup, -b تهیهٔ یک نسخهٔ پشتیبان از فایل دادهٔ هر جدول با نام tbl_name.OLD. • --character-sets-dir=path دایرکتوری محل نصب مجموعه‌های نویسه (character sets). نگاه کنید به بخش 9.5، “Character Set Configuration”. • --debug[=debug_options], -# [debug_options] نوشتن یک لاگ اشکال‌زدایی. یک رشتهٔ معمولی برای debug_options به صورت 'd:t:o,file_name' است. مقدار پیش‌فرض 'd:t:o' می‌باشد. • --force, -f تولید جدول فشرده حتی اگر اندازهٔ آن از نسخهٔ اصلی بزرگ‌تر شود یا فایل واسط ناشی از فراخوانی قبلی myisampack وجود داشته باشد. (myisampack در حین فشرده‌سازی جدول، یک فایل واسط به نام tbl_name.TMD در دایرکتوری پایگاه داده ایجاد می‌کند. اگر فرایند myisampack را متوقف کنید، ممکن است فایل .TMD حذف نشود.) در حالت عادی، اگر myisampack ببیند که فایل tbl_name.TMD وجود دارد با یک خطا خارج می‌شود. با گزینهٔ --force، ابزار myisampack به هر حال جدول را فشرده می‌کند. • --join=big_tbl_name, -j big_tbl_name تمام جدول‌های نام‌برده در خط فرمان را درون یک جدول فشردهٔ منفرد به نام big_tbl_name ادغام می‌کند. همهٔ جدول‌هایی که قرار است ترکیب شوند باید ساختار کاملاً یکسانی داشته باشند (نام‌ها و انواع ستون‌های یکسان، نمایه‌های یکسان و غیره). big_tbl_name نباید پیش از عملیات ادغام وجود داشته باشد. تمام جدول‌های مبدأ ذکرشده در خط فرمان که قرار است در big_tbl_name ادغام شوند باید وجود داشته باشند. جدول‌های مبدأ برای عملیات ادغام خوانده می‌شوند اما تغییری نمی‌کنند. عملیات ادغام فایلی با پسوند .frm برای big_tbl_name ایجاد نمی‌کند؛ بنابراین پس از اتمام عملیات ادغام، فایل .frm را از یکی از جدول‌های مبدأ کپی کرده و نام آن را به big_tbl_name.frm تغییر دهید. • --silent, -s حالت بی‌صدا. خروجی را تنها هنگامی می‌نویسد که خطایی رخ دهد. • --test, -t جدول را در عمل فشرده نمی‌کند، بلکه تنها فشرده‌سازی آن را می‌آزماید. • --tmpdir=path, -T path از دایرکتوری نام‌برده به‌عنوان مکانی که myisampack فایل‌های موقت را در آن ایجاد می‌کند استفاده می‌کند. • --verbose, -v حالت پرگو. اطلاعاتی دربارهٔ پیشرفت عملیات فشرده‌سازی و نتیجهٔ آن می‌نویسد. • --version, -V نمایش اطلاعات نسخه و خروج. • --wait, -w در صورتی که جدول در حال استفاده باشد منتظر مانده و دوباره تلاش می‌کند. اگر سرور mariadbd با قفل‌گذاری خارجی غیرفعال اجرا شده باشد، در صورتی که احتمال به‌روزرسانی جدول توسط سرور در حین فرایند فشرده‌سازی وجود داشته باشد، اجرای myisampack توصیه نمی‌شود. توالی دستورهای زیر یک نشست نمونه از فشرده‌سازی جدول را نشان می‌دهد: shell> ls -l station.* -rw-rw-r-- 1 monty my 994128 Apr 17 19:00 station.MYD -rw-rw-r-- 1 monty my 53248 Apr 17 19:00 station.MYI -rw-rw-r-- 1 monty my 5767 Apr 17 19:00 station.frm shell> myisamchk -dvv station MyISAM file: station Isam-version: 2 Creation time: 1996-03-13 10:08:58 Recover time: 1997-02-02 3:06:43 Data records: 1192 Deleted blocks: 0 Datafile parts: 1192 Deleted data: 0 Datafile pointer (bytes): 2 Keyfile pointer (bytes): 2 Max datafile length: 54657023 Max keyfile length: 33554431 Recordlength: 834 Record format: Fixed length table description: Key Start Len Index Type Root Blocksize Rec/key 1 2 4 unique unsigned long 1024 1024 1 2 32 30 multip. text 10240 1024 1 Field Start Length Type 1 1 1 2 2 4 3 6 4 4 10 1 5 11 20 6 31 1 7 32 30 8 62 35 9 97 35 10 132 35 11 167 4 12 171 16 13 187 35 14 222 4 15 226 16 16 242 20 17 262 20 18 282 20 19 302 30 20 332 4 21 336 4 22 340 1 23 341 8 24 349 8 25 357 8 26 365 2 27 367 2 28 369 4 29 373 4 30 377 1 31 378 2 32 380 8 33 388 4 34 392 4 35 396 4 36 400 4 37 404 1 38 405 4 39 409 4 40 413 4 41 417 4 42 421 4 43 425 4 44 429 20 45 449 30 46 479 1 47 480 1 48 481 79 49 560 79 50 639 79 51 718 79 52 797 8 53 805 1 54 806 1 55 807 20 56 827 4 57 831 4 shell> myisampack station.MYI Compressing station.MYI: (1192 records) - Calculating statistics normal: 20 empty-space: 16 empty-zero: 12 empty-fill: 11 pre-space: 0 end-space: 12 table-lookups: 5 zero: 7 Original trees: 57 After join: 17 - Compressing file 87.14% Remember to run myisamchk -rq on compressed tables shell> ls -l station.* -rw-rw-r-- 1 monty my 127874 Apr 17 19:00 station.MYD -rw-rw-r-- 1 monty my 55296 Apr 17 19:04 station.MYI -rw-rw-r-- 1 monty my 5767 Apr 17 19:00 station.frm shell> myisamchk -dvv station MyISAM file: station Isam-version: 2 Creation time: 1996-03-13 10:08:58 Recover time: 1997-04-17 19:04:26 Data records: 1192 Deleted blocks: 0 Datafile parts: 1192 Deleted data: 0 Datafile pointer (bytes): 3 Keyfile pointer (bytes): 1 Max datafile length: 16777215 Max keyfile length: 131071 Recordlength: 834 Record format: Compressed table description: Key Start Len Index Type Root Blocksize Rec/key 1 2 4 unique unsigned long 10240 1024 1 2 32 30 multip. text 54272 1024 1 Field Start Length Type Huff tree Bits 1 1 1 constant 1 0 2 2 4 zerofill(1) 2 9 3 6 4 no zeros, zerofill(1) 2 9 4 10 1 3 9 5 11 20 table-lookup 4 0 6 31 1 3 9 7 32 30 no endspace, not_always 5 9 8 62 35 no endspace, not_always, no empty 6 9 9 97 35 no empty 7 9 10 132 35 no endspace, not_always, no empty 6 9 11 167 4 zerofill(1) 2 9 12 171 16 no endspace, not_always, no empty 5 9 13 187 35 no endspace, not_always, no empty 6 9 14 222 4 zerofill(1) 2 9 15 226 16 no endspace, not_always, no empty 5 9 16 242 20 no endspace, not_always 8 9 17 262 20 no endspace, no empty 8 9 18 282 20 no endspace, no empty 5 9 19 302 30 no endspace, no empty 6 9 20 332 4 always zero 2 9 21 336 4 always zero 2 9 22 340 1 3 9 23 341 8 table-lookup 9 0 24 349 8 table-lookup 10 0 25 357 8 always zero 2 9 26 365 2 2 9 27 367 2 no zeros, zerofill(1) 2 9 28 369 4 no zeros, zerofill(1) 2 9 29 373 4 table-lookup 11 0 30 377 1 3 9 31 378 2 no zeros, zerofill(1) 2 9 32 380 8 no zeros 2 9 33 388 4 always zero 2 9 34 392 4 table-lookup 12 0 35 396 4 no zeros, zerofill(1) 13 9 36 400 4 no zeros, zerofill(1) 2 9 37 404 1 2 9 38 405 4 no zeros 2 9 39 409 4 always zero 2 9 40 413 4 no zeros 2 9 41 417 4 always zero 2 9 42 421 4 no zeros 2 9 43 425 4 always zero 2 9 44 429 20 no empty 3 9 45 449 30 no empty 3 9 46 479 1 14 4 47 480 1 14 4 48 481 79 no endspace, no empty 15 9 49 560 79 no empty 2 9 50 639 79 no empty 2 9 51 718 79 no endspace 16 9 52 797 8 no empty 2 9 53 805 1 17 1 54 806 1 3 9 55 807 20 no empty 3 9 56 827 4 no zeros, zerofill(2) 2 9 57 831 4 no zeros, zerofill(1) 2 9 myisampack اطلاعات زیر را نمایش می‌دهد: • normal تعداد ستون‌هایی که هیچ فشرده‌سازی اضافی برای آن‌ها استفاده نشده است. • empty-space تعداد ستون‌هایی که تنها شامل مقادیر فاصله هستند. این موارد یک بیت فضا اشغال می‌کنند. • empty-zero تعداد ستون‌هایی که تنها شامل مقادیر صفر دودویی (binary zero) هستند. این موارد یک بیت فضا اشغال می‌کنند. • empty-fill تعداد ستون‌های عدد صحیحی که دامنهٔ کامل بایتی نوع دادهٔ خود را اشغال نمی‌کنند. این ستون‌ها به یک نوع دادهٔ کوچک‌تر تغییر می‌یابند. به عنوان مثال، یک ستون BIGINT (هشت بایت) در صورتی که تمام مقادیر آن در بازهٔ -128 تا 127 باشد، می‌تواند به عنوان یک ستون TINYINT (یک بایت) ذخیره شود. • pre-space تعداد ستون‌های ده‌دهی (decimal) که با فاصله‌های ابتدایی ذخیره شده‌اند. در این حالت، هر مقدار شامل شمارشی از تعداد فاصله‌های ابتدایی است. • end-space تعداد ستون‌هایی که فاصله‌های انتهایی زیادی دارند. در این حالت، هر مقدار شامل شمارشی از تعداد فاصله‌های انتهایی است. • table-lookup ستون تنها تعداد کمی مقدار متفاوت داشت که پیش از فشرده‌سازی هافمن (Huffman) به یک ENUM تبدیل شدند. • zero تعداد ستون‌هایی که تمام مقادیر آن‌ها صفر است. • Original trees تعداد اولیهٔ درخت‌های هافمن. • After join تعداد درخت‌های مجزای هافمن که پس از ادغام درخت‌ها به منظور صرفه‌جویی در فضای سرایند (header) باقی مانده‌اند. پس از فشرده‌سازی یک جدول، خطوط Field نمایش‌داده‌شده توسط myisamchk -dvv شامل اطلاعات تکمیلی دربارهٔ هر ستون هستند: • Type نوع داده. این مقدار می‌تواند شامل هر یک از توصیف‌کننده‌های زیر باشد: • constant تمام سطرها مقدار یکسانی دارند. • no endspace فاصله‌های انتهایی ذخیره نشوند. • no endspace, not_always فاصله‌های انتهایی ذخیره نشوند و فشرده‌سازی فاصله‌های انتهایی برای تمام مقادیر اعمال نشود. • no endspace, no empty فاصله‌های انتهایی ذخیره نمی‌شوند. مقادیر خالی ذخیره نمی‌شوند. • table-lookup ستون به یک ENUM تبدیل شده است. • zerofill(N) N بایت پرارزش در مقدار، همواره ۰ هستند و ذخیره نمی‌شوند. • no zeros صفرها ذخیره نمی‌شوند. • always zero مقادیر صفر با استفاده از یک بیت ذخیره می‌شوند. • Huff tree شمارهٔ درخت هافمن مرتبط با ستون. • Bits تعداد بیت‌های استفاده‌شده در درخت هافمن. پس از اجرای myisampack، باید برای بازسازی نمایه‌ها myisamchk را اجرا کنید. در این هنگام، می‌توانید بلوک‌های نمایه را نیز مرتب کرده و آمارهای لازم برای کارکرد کارآمدتر بهینه‌ساز MariaDB را ایجاد کنید: shell> myisamchk -rq --sort-index --analyze tbl_name.MYI پس از قرار دادن جدول فشرده‌شده در دایرکتوری پایگاه دادهٔ MariaDB، باید دستور mariadb-admin flush-tables را اجرا کنید تا mariadbd مجبور به استفاده از جدول جدید شود. برای از حالت فشرده خارج کردن یک جدول فشرده، از گزینهٔ --unpack در myisamchk استفاده کنید. کپی‌رایت و تکثیر (COPYRIGHT) کپی‌رایت 2007-2008 MySQL AB, 2008-2010 Sun Microsystems, Inc., 2010-2025 MariaDB Foundation این مستندات نرم‌افزار آزاد است؛ شما می‌توانید آن را تنها تحت شرایط مجوز عمومی همگانی گنو همان‌گونه که توسط بنیاد نرم‌افزارهای آزاد منتشر شده است، بازتوزیع کرده و/یا تغییر دهید؛ نسخهٔ ۲ مجوز. این مستندات به این امید که مفید واقع شود توزیع شده است، اما بدون هیچ‌گونه ضمانتی؛ حتی بدون ضمانت ضمنی قابل فروش بودن یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به مجوز عمومی همگانی گنو مراجعه کنید. شما باید به همراه این برنامه یک نسخه از مجوز عمومی همگانی گنو را دریافت کرده باشید؛ در غیر این صورت، به Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA بنویسید یا http://www.gnu.org/licenses را ببینید. برای اطلاعات بیشتر، لطفاً به مستندات MariaDB که به‌صورت برخط در https://mariadb.com/docs در دسترس است مراجعه کنید. نویسنده (AUTHOR) بنیاد MariaDB (http://www.mariadb.org). MariaDB 11.8 5 March 2025 MYISAMPACK(1)