মাইএসকিউএল সহ সারি আকারের ত্রুটি


11

আমি আমার ম্যাকবুকটিতে একটি পরীক্ষার জন্য মাইএসকিউএল সার্ভার চালাচ্ছি। সংস্করণ হোমব্রু থেকে 5.6.20। আমি "সারি আকার খুব বড়" ত্রুটিগুলির মধ্যে দৌড়াতে শুরু করেছি এবং আমি এটি পরীক্ষার ক্ষেত্রে এটি হ্রাস করতে সক্ষম হয়েছি। টেবিল:

mysql> describe test;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| id    | int(11)  | NO   | PRI | NULL    | auto_increment |
| stuff | longtext | YES  |     | NULL    |                |
+-------+----------+------+-----+---------+----------------+

সারণীর স্থিতি:

mysql> show table status where Name = 'test';
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time         | Update_time | Check_time | Collation       | Checksum | Create_options | Comment |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+
| test | InnoDB |      10 | Compact    |    1 |          16384 |       16384 |               0 |            0 |   5242880 |              2 | 2014-08-28 23:51:12 | NULL        | NULL       | utf8_general_ci |     NULL |                |         |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+

টেবিলে একটি সারি সন্নিবেশ করানোর চেষ্টা করার সময় আমি যে ত্রুটিটি পেয়েছি stuffসেগুলিতে কলামটিতে 5033932 বাইটের বেশি রয়েছে।

mysql> select length(stuff) from test;
+---------------+
| length(stuff) |
+---------------+
|       5033932 |
+---------------+

mysql> update test set stuff = concat(stuff, 'a');
ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.

আমি এই ত্রুটিটি ঘিরে অনুসন্ধান করেছি, বেশিরভাগ উত্তরের মধ্যে অনেকগুলি টিএসএসএল কলাম রয়েছে এবং প্রত্যেকেরই 768 বাইট ইনলাইন সঞ্চিত রয়েছে। যেমন আপনি দেখতে পাচ্ছেন, তা আমার পক্ষে হয় না। এছাড়াও, টেবিলে আমার কলামগুলির সংখ্যা নির্বিশেষে 5033932 নম্বরটি একই থাকে। আমার আসল অ্যাপ্লিকেশনটিতে, পাঁচটি কলাম ছিল এবং কলামের আকার 5033932 ছাড়িয়ে গেলে আপডেটগুলি এখনও ব্যর্থ হয়েছিল।

আমি লোকেরা সারি ফর্ম্যাটগুলি স্যুইচ করেও সমস্যার সমাধান করতে দেখেছি, যা আমি কিছুটা চেষ্টা করব, তবে আমি বুঝতে চাই যে ঠিক কী কারণে এই ত্রুটি ঘটছে।

আগাম ধন্যবাদ!

উত্তর:


12

5.6.20 প্রকাশের নোটগুলিতে পরিবর্তন:

বড়, বাহ্যিকভাবে সঞ্চিত বিএলওবি ক্ষেত্রগুলির জন্য পুনরায় লগ লিখুন সর্বাধিক সাম্প্রতিক চেকপয়েন্টটি ওভাররাইট করতে পারে। 5.6.20 প্যাচটি পুনরায় লগের আকার সীমাবদ্ধ করে বিএলএবও পুনরায় লোগো ফাইলের আকারের 10% এ লেখায়। 5.7.5 প্যাচ কোনও সীমাবদ্ধতা চাপিয়ে না দিয়ে বাগটিকে সম্বোধন করে। মাইএসকিউএল 5.5-র ক্ষেত্রে বাগটি একটি পরিচিত সীমাবদ্ধতা থেকে যায়।

মাইএসকিউএল ৫..6 এর জন্য পুনরায় লগের বিএলওবি লেখার সীমাবদ্ধতার ফলস্বরূপ, ইনোডাব_ব্লগ_ফাইল_সাইজটি আপনার টেবিলের সারিগুলিতে এবং অন্যান্য পরিবর্তনশীল দৈর্ঘ্যের ক্ষেত্রগুলির দৈর্ঘ্যের (ভ্রচার, ভারবাইনারি) এর সারিগুলিতে পাওয়া সবচেয়ে বড় বিএলওবি ডেটা আকারের 10 গুণ বেশি মান নির্ধারণ করতে হবে inn , এবং পাঠ্য টাইপ ক্ষেত্র)। এটি করতে ব্যর্থ হওয়ার ফলে "সারি আকার খুব বড়" ত্রুটি হতে পারে।

(জোর আমার)

এর জন্য ডিফল্ট innodb_log_file_sizeহ'ল 50331648, যার অর্থ আপনি যে ধরণের ডেটা টাইপ নির্বিশেষে তৈরি করতে পারবেন বৃহত্তম বিএলএব / টেক্সট মান 5033164 এর কাছাকাছি, এবং আপনি সুনির্দিষ্ট মান 5033932 আবিষ্কার করেছেন I আমি মনে করি অভ্যন্তরীণভাবে গণনাটিতে কিছু ফজ ফ্যাক্টর জড়িত।

সুতরাং আপনি আরও innodb_log_file_sizeবড় BLOB / পাঠ্য ডেটা সঞ্চয় করতে চাইলে আপনার বাড়াতে হবে। ভাগ্যক্রমে, লোগো ফাইলের আকার পরিবর্তন করা InnoDB- র পূর্ববর্তী সংস্করণগুলির তুলনায় 5.6 এ অনেক সহজ। নতুন মান সহ কেবল আপনার my.cnf এ একটি লাইন যুক্ত করুন এবং mysqld পুনরায় আরম্ভ করুন।


ছোট্ট বিজ্ঞপ্তি, আপনাকে অবশ্যই পুনঃসূচনা বা থামাতে হবে এবং পরিবর্তনটি প্রভাবিত হতে দিতে আবার শুরু করতে হবে, পুনরায় লোড কাজ করবে না
হিও ভিও

1
এই পুনরায় আকারের সীমাটি mysql 5.6.22 থেকে মোট সম্মিলিত ইনানোডব_লগ_ফাইল_সাইজের (ইনোনোডব_লগ_ফাইলে_সাইজ * ইনানোডব_লগ_ফাইল_ইন_গ্রুপ) এর 10% এ শিথিল করা হয়েছে। এবং লংব্লবটির সর্বাধিক দৈর্ঘ্য 4294967295 (2 ^ 32 - 1) অক্ষর অর্থাত্ 4 গিগাবাইট থাকতে পারে। এই লম্বলব্লু মানটি সঞ্চয় করতে আমাদের ন্যূনতম 40 জিবি সমন্বিত ইনোডাব_লগ_ফিল_সাইজ (ইনোডাব_ব্লগ_ফাইলে_সাইজ * ইনানোডব_লগ_ফায়াল_ইন_গ্রুপ) থাকা উচিত।
কাসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.