InnoDB টেবিল ত্রুটি তৈরি করুন: "সারি আকার খুব বড়"


11

আমাদের এমন কিছু প্রকৌশলী রয়েছে যা একটি রিপোর্ট তৈরির উদ্দেশ্যে একটি অস্থায়ী টেবিলের জন্য একটি সাধারণীকরণ ডিবি কাঠামোকে সমতল করে দেয়। কলামগুলি নির্দিষ্ট করা হয়েছে TEXT NOT NULL(আমি জানি "তারা কেন এটি করছে?"; আসুন আমরা ধরে নিই যে আমরা এটি সম্বোধন করছি)।

আমরা লিনাক্সে InnoDB প্লাগ-ইন 1.0.9 সহ মাইএসকিউএল 5.1.48 সম্প্রদায় আরএইচইএল 5 ব্যবহার করি।

মাইআইএসএএম ব্যবহার করার সময় আমরা কখনই সর্বাধিক কলামের সারণি আকার বা সর্বাধিক সারি দৈর্ঘ্যের মুখোমুখি হই নি (তদন্তের সময় আমরা সর্বোচ্চ কলামগুলির সীমাটি 2598 এ পৌঁছেছি (2599 তম ত্রুটি 1117 ঘটায়। সারণী (কোনও তথ্য সন্নিবেশ নেই):

লাইন 1 এ ত্রুটি 1118 (42000): সারি আকার খুব বড়। ব্যবহৃত টেবিল প্রকারের সর্বাধিক সারি আকার, বিএলএলবিগুলি গণনা করা হচ্ছে না, এটি 8126 some আপনাকে কিছু কলামগুলি পাঠ্য বা বিএলবিএবগুলিতে পরিবর্তন করতে হবে

আমি নিম্নলিখিতগুলির উত্তর খুঁজছি:

  1. অনেকগুলি ভি / ভি / বি / টি কলাম ব্যবহার করার সময় সারি আকারের পার্টিকুল্যারি নির্ধারণের জন্য বিশদ সূত্র কী? আমি varchar(N)কলামগুলি (যেখানে এন 1 এবং 512 এর মধ্যে রয়েছে), ইউটিএফ 8 চারসেট (* 3) এবং টেবিলের যতগুলি কলামগুলি ব্যর্থ হওয়া পর্যন্ত গ্রহণ করবে সেগুলি ব্যবহার করে আমি কয়েকটি পৃথক সূত্র চেষ্টা করেছি । আমি যে কম্বো ব্যবহারের চেষ্টা করেছি তার কোনওটিই প্রকৃত পরীক্ষার ফলাফলের সাথে মান মেলে না give

  2. সারির আকার গণনা করার সময় আমাকে আর কোন 'ওভারহেড' বিবেচনা করতে হবে?

  3. আমি যখন ভার্চার (109) কলামগুলির সাথে টেবিল তৈরি থেকে বার্চার (110) কলামে সারণি তৈরি করতে যাই কেন ত্রুটি বার্তা 8126 থেকে 65535 এ পরিবর্তিত হয়?


আমারও একই সমস্যা ছিল। যখন আমি একটি ডাটাবেস যাচাই করছিলাম তখন আমি দেখতে পেলাম যে ওয়েব ব্রাউজারে অ্যাড-অনগুলির মধ্যে একটি পৃষ্ঠার উত্স কোডটিতে (এমনকি ফর্ম পর্যন্ত) এইচটিএমএল কোড সন্নিবেশ করছিল এবং এটি সমস্যার কারণ হচ্ছিল।

এইচটিএমএল ভিলেন নয়। না যে এইচটিএমএল আকার। আপনার অবশ্যই একাধিক পাঠ্য / বার্চার কলাম থাকতে পারে এবং কিছু সীমাবদ্ধতা আঘাত করেছে যা আশেপাশে কাজ করা যেতে পারে।
রিক জেমস

উত্তর:


19

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

কেন্দ্রীয় tablespace- র ফাইল (ibdata1) এ সর্বদা Antelope বিন্যাস। আপনি যদি প্রতি টেবিলে ফাইল ব্যবহার করেন তবে আপনি পৃথক ফাইলগুলি মাই সিএনএফ এ সেট করে ব্যারাকুডা ফর্ম্যাটটি ব্যবহার করতে পারবেন innodb_file_format=Barracuda

বেসিক পয়েন্টস:

  • ইনোডিবি ডেটার একটি 16 কেবি পৃষ্ঠায় অবশ্যই কমপক্ষে দুটি সারি ডেটা রাখা উচিত। এছাড়াও প্রতিটি পৃষ্ঠায় একটি শিরোনাম এবং পাদলে চেকসাম এবং লগ সিকোয়েন্স নম্বর এবং এমন একটি পাদচরণ রয়েছে। সেখানেই আপনি সারি প্রতি 8KB এর থেকে কিছুটা কম সীমা পান।

  • INTEGER, তারিখ, ফ্লাট, CHAR এর মতো স্থির-আকারের ডেটা এই প্রাথমিক ডেটা পৃষ্ঠায় সংরক্ষণ করা হয় এবং সারি আকারের সীমাতে গণনা করা হয়।

  • ভেরিয়েবল-আকারের ডেটা ধরণের মতো ভ্রচার, পাঠ্য, বিএলওবি ওভারফ্লো পৃষ্ঠায় সংরক্ষণ করা হয়, তাই তারা সারি আকারের সীমাতে সম্পূর্ণ গণনা করে না। অ্যান্টেলোপে, ওভারফ্লো পৃষ্ঠায় সঞ্চিত হওয়ার পাশাপাশি এ জাতীয় কলামগুলির 768 বাইট অবধি প্রাথমিক তথ্য পৃষ্ঠায় সংরক্ষণ করা হয়। ব্যারাকুদা একটি গতিশীল সারি বিন্যাস সমর্থন করে , তাই এটি প্রাথমিক ডেটা পৃষ্ঠায় কেবলমাত্র 20-বাইট পয়েন্টার সঞ্চয় করতে পারে।

  • দৈর্ঘ্যটি এনকোড করার জন্য ভেরিয়েবল-আকারের ডেটা প্রকারগুলি 1 বা আরও বেশি বাইট সহ উপসর্গযুক্ত হয়। এবং InnoDB সারি বিন্যাসে ফিল্ড অফসেটগুলির একটি অ্যারেও রয়েছে। সুতরাং তাদের উইকিতে কমবেশি নথিভুক্ত একটি অভ্যন্তরীণ কাঠামো রয়েছে । [সম্পাদনা] মৃত লিঙ্ক - এখানে এখন আরও ভাল দেখাচ্ছে।

ওভারফ্লো ডেটার জন্য আরও স্টোরেজ দক্ষতা অর্জনের জন্য বারাকুডা একটি ROW_FORMAT = সংক্ষেপিত সমর্থন করে।

আমার আরও মন্তব্য করতে হবে যে আমি কোনও সুনির্দিষ্টভাবে নকশাযুক্ত টেবিলটি সারি আকারের সীমা ছাড়িয়ে দেখিনি। এটি একটি শক্তিশালী "কোড গন্ধ" যা আপনি প্রথম সাধারণ ফর্মটির পুনরাবৃত্তি গোষ্ঠীগুলির শর্ত লঙ্ঘন করছেন ।


2
ডিজি-সচেতন নন এমন প্রকৌশলীদের জন্য ফ্ল্যাট ডেটা রুটে যাওয়া খুব সহজ। এটি কখনও সম্পাদন করে না। আমার নিজস্ব লেগ্যাসি ডিবি যার একই রকম পরিস্থিতি রয়েছে তা সারির আকারকে এত কম নাটকীয়ভাবে মারছে না তবে ছেলে এটি কি পারফরম্যান্সের वरदान! আমি বলব যে আপনার প্রতিবেদক ইঞ্জিনিয়ারকে এটি মেনে নেওয়া দরকার যে তাদের সাথে যোগ দিতে হবে এবং কেবলমাত্র সূচীকরণের পুরোটা জুড়ে সেই কাজটি করতে হবে।
টেকিগার্ল

1

আমার পরিস্থিতি কিছুটা আলাদা। প্রতিটি সারিতে আমার যে ডেটা উপাদান সংরক্ষণ করতে হবে এটির একটি সম্ভাব্য খুব বড়। (ডেটা ফিল্ড এমন নথির জন্য একটি লম্বলব যা একাধিক এমবেড থাকা চিত্র থাকতে পারে My আমার স্যাম্পল ডাটাবেসে 25 - 30 এমবি আকারের ডকুমেন্ট থাকে তবে এই ডকুমেন্টগুলি কিছু ক্ষেত্রে বড় হতে পারে)) আমি অনলাইনে খুঁজে পেয়েছি এমন সমাধানগুলির মধ্যে কোনওোটাই ত্রাণ সরবরাহ করেন নি । (InnoDB ফাইলের ধরনটি বারাকুডায় পরিবর্তিত হয়েছে, লগ ফাইলের আকার বাড়িয়েছে, সারি ফর্ম্যাটটি সংকুচিত করতে সেট করুন))

আমার পক্ষে যে সমাধান হয়েছে তার একমাত্র সমাধান হ'ল মাইএসকিউএল 5.6.x থেকে মাইএসকিউএল 5.5.x এ ফিরে আসা was

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