কেন আমি কখনই ALGORITHM = COPY এ ALGORITHM = INPLACE পছন্দ করব?


16

যেহেতু মাইএসকিউএল 5.6 অনলাইন ডিডিএল প্রবর্তন করেছে, ALTER TABLEআদেশটি optionচ্ছিকভাবে ALGORITHM=INPLACEবা হয় বা ALGORITHM=COPYনির্দিষ্ট করে থাকতে পারে । অনলাইন ডিডিএল- এর সংক্ষিপ্ত বিবরণ নোট করে যে, ডিফল্টরূপে, INPLACEযেখানেই সম্ভব ব্যবহার করা হয় এবং বোঝানো হয় (একেবারেই উল্লেখ না করে) যে INPLACEঅ্যালগোরিদম তার চেয়ে কম সস্তা COPY

সুতরাং কোন কারণে আমি কখনই ALGORITHM=COPYকোনও ALTER TABLEবিবৃতিতে নির্দিষ্ট করতে পারি ?


আপনি যদি কপি ব্যবহার করেন তবে টেবিলে সূচকের কী হবে? কোনও নতুন সারণী তৈরি এবং স্ক্র্যাচ থেকে পপুলেটের কারণে আপনি কি ডিফ্র্যাগমেন্টযুক্ত সূচকগুলি শেষ করছেন?
ডেভ পুলি

যদি কপি স্ক্র্যাচ থেকে পপুলেশন করে তবে এটি ধীর বিকল্প হলেও ফলস্বরূপ টেবিলটি ডিগ্র্যাগড ইনডেক্সগুলির কারণে আরও ভাল সম্পাদন করতে পারে।
ডেভ পুলি

@ ডেভপুল নিস তত্ত্ব, তবে আমি সন্দেহ করি যেহেতু এটির চিহ্নটি বন্ধ রয়েছে OPTIMIZE TABLE( যেহেতু আমি বিশ্বাস করি যে এটির উদ্দেশ্যগুলির বৃহত অংশ ALGORITHM=INPLACEহিসাবে সূচকগুলি ডিফ্র্যাগিং করেছে ) মাইএসকিউএল ৫.7.৪ ব্যবহার করে। তাই আমি মনে করি এটা ক্ষেত্রে যে, হ্যাঁ, এর COPY আছে Defrag ইনডেক্স কিন্তু তাই আছেINPLACE (একরকম), এর একটি সম্ভাব্য সুবিধা যেমন অকার্যকর COPY
মার্ক

2
"মাইএসকিউএল 5.6 এর আগে তৈরি ইনোডিবি টেবিলগুলি ALTER TABLE ... ALGORITHM=INPLACEটেম্পোরাল কলামগুলিতে ( ALTER TABLE ... ALGORITHM=COPY
ডেট

উত্তর:


10

হ্যাঁ, আপনি উল্লেখ করতে পারেন এমন কেসগুলি রয়েছে COPYতবে এটি পারফরম্যান্সের চেয়ে অন্য কারণে।

এটি বুঝতে গুরুত্বপূর্ণ যে মাইএসকিউএল নতুন বৈশিষ্ট্যটি চালু করেছে - 5.5 সংস্করণে অনলাইন ডিএলএল প্রসেসিং। এটি অফলাইন প্রক্রিয়াকরণ সরিয়ে দেয় না। সুতরাং এই 2 টি পদ্ধতির মধ্যে পার্থক্য করার প্রয়োজন আছে:

  1. কিছু অপারেশন এখনও কেবল অফলাইন মোডে কাজ করে। ডিডিএল অপারেশনগুলির একটি তালিকার জন্য সারণী 15.10, " ডিডিএল অপারেশনের জন্য অনলাইন স্ট্যাটাসের সংক্ষিপ্তসার " দেখুন যা জায়গায় জায়গায় সম্পাদন করা যায় বা করা যায় না।

  2. অনলাইন এবং অফলাইন মোডে অপারেশনগুলির কিছুটা আলাদা আচরণ থাকে, সুতরাং আপনি সামঞ্জস্যের কারণে "পুরানো" একটি চয়ন করতে পারেন।

কিছু উদাহরণ (দয়া করে আরও পরামর্শ দিন):

  1. মাইএসকিউএল 5.6 এর পূর্বে তৈরি InnoDB টেবিলগুলি ALTER TABLE ... ALGORITHM=INPLACEটেম্পোরাল কলামগুলি ( DATE, DATETIMEবা TIMESTAMP) অন্তর্ভুক্ত এবং ব্যবহার করে পুনর্নির্মাণ করা হয়নি এমন টেবিলগুলির জন্য সমর্থন করে না ALTER TABLE ... ALGORITHM=COPY। এই ক্ষেত্রে, একটি ALTER TABLE ... ALGORITHM=INPLACEঅপারেশন ত্রুটি প্রদান করে।

  2. ADD PRIMARY KEYধারাটিতে COPY modeনীরবে NULLসেই ডেটা টাইপের জন্য ডিফল্ট মানগুলিতে রূপান্তরিত হয় (আইএনটির জন্য 0, বার্চারের জন্য খালি স্ট্রিং), যেখানে এটি করা IN_PLACEহয় না।

ALGORITHM = কপি অনুচ্ছেদে, প্রাথমিক কী কলামগুলিতে NULL মান উপস্থিত থাকা সত্ত্বেও অপারেশন সফল হয়; ডেটা নিঃশব্দে পরিবর্তিত হয়েছে, যা সমস্যার কারণ হতে পারে।

পছন্দ করার আরেকটি কারণ COPY:

বিশেষায়িত পরিস্থিতিতে দৃ backward় পশ্চাদপসরণ-সামঞ্জস্যের প্রয়োজন হলে টেবিল-অনুলিপি আচরণকে বাধ্য করার জন্য যে কাজগুলির জন্য আপনি ALGORITHM = COPY বা old_alter_table = 1 নির্দিষ্ট করেছেন rations

যদিও মাইএসকিউএল ম্যানুয়ালটি প্রকৃত পরিস্থিতি সম্পর্কে কথা বলে না, আপনি কিছু কল্পনা করতে পারেন। উদাহরণস্বরূপ বিকাশকারী ALTER INDEXঅপারেশনের সময় টেবিলটি লক হওয়ার উপর নির্ভর করে তাই টেবিলটি কেবলমাত্র পঠনযোগ্য বা সম্পূর্ণ লক করা আছে এবং এমন একটি প্রক্রিয়া রয়েছে যা সূচি পুনর্নির্মাণের সময় স্থির টেবিলটি পড়ে।


1
আমি মনে করি লোকেরাও ALGORITHM=INPLACE"এটি অনলাইন ডিডিএল এবং ডেটাবেস লক করবে না" নিয়ে বিভ্রান্তির ঝোঁক রাখে , যখন বাস্তবে তারা আসলে ব্যবহার করতে চায় LOCK=NONE
ব্রেন্ডন বাইার্ড

2

@ স্টলেগের সম্ভবত সবচেয়ে ভাল উত্তর আছে তবে এখানে অন্যটি দেওয়া আছে। এটি একটি শিক্ষিত অনুমান যা বিকাশকারীরা =COPYএকটি গুরুতর ত্রুটি-বিচ্যুতির ঘটনা ঘটলে পালানোর হ্যাচ হিসাবে ফেলেছিল =INLINE। এটি ব্যবহারকারীদের ALTERনতুন বৈশিষ্ট্যটি ভেঙে গেলেও ব্যবহার চালিয়ে যেতে দেবে ।

আমি বছরের পর বছরগুলিতে এ জাতীয় জিনিসগুলি (পতাকা sql_mode, my.cnfসেটিংস ইত্যাদিতে) দেখেছি । নতুন প্রকাশের উদ্দেশ্যটি নতুন, আরও ভাল, বৈশিষ্ট্যটি পরিষ্কারভাবে প্রকাশ করা।

অপ্টিমাইজেশন পতাকাগুলি এই বিভাগে পড়ে তবে পূর্বের ক্রিয়াগুলিতে ঝাঁকুনির আরও অনেক কারণ রয়েছে - অপটিমাইজার কখনও কখনও "এটিকে ভুল করে তোলে"; এখানে খুব বেশি সম্ভাবনা রয়েছে।


1
আপনি এটিকে "পশ্চাদপদ সামঞ্জস্যতা" না বলে "এস্কেপ হ্যাচ" বলবেন কেন? যদিও খুব বেশি পার্থক্য নাও থাকতে পারে;)
Stoleg

1
আমি উভয় সংস্করণে চালানোর জন্য যদি একই কোডের প্রয়োজন হয় তবে আমি "পশ্চাদপদ সামঞ্জস্যতা" বলব। তবে আমি উদ্বেগ জানাব যে নতুন সিনট্যাক্সটি পুরানো সংস্করণ দ্বারা স্বীকৃত হয়েছে কিনা।
রিক জেমস

-1

মাইএসকিউএলের সংস্করণগুলিতে যা ইনোডিবি টেবিলস্পেস এনক্রিপশন সমর্থন করে, আপনি যখন এনক্রিপশন যুক্ত করতে কোনও টেবিল পরিবর্তন করেন, প্রয়োজনের বাইরে অনুলিপিটি অনুলিপি ব্যবহার করেই করা হয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.