1114 (HY000): টেবিলটি পূর্ণ is


114

আমি InnoDBএকটি সাধারণ প্রশ্নের সাথে একটি টেবিলটিতে একটি সারি যুক্ত করার চেষ্টা করছি :

INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills');

তবে যখন আমি এই ক্যোয়ারীটি চেষ্টা করি তখন আমি নিম্নলিখিতটি পাই:

ত্রুটি 1114 (HY000): সারণী zip_codesপূর্ণ

করছেন a

SELECT COUNT(*) FROM zip_codes

আমাকে 188,959 সারি দেয়, যা একই ডাটাবেসে 810,635 টি সারি সহ আমার অন্য একটি টেবিল রয়েছে বলে বিবেচনা করে খুব বেশি মনে হয় না।

আমি এর সাথে মোটামুটি অনভিজ্ঞ InnoDB engineএবং এই সমস্যাটি কখনই অনুভব করি না MyISAM। এখানে সম্ভাব্য কয়েকটি সমস্যা কী?

সম্পাদনা: zip_codesসারণীতে একটি সারি যুক্ত করার সময় এটি ঘটে ।


আপনি কোনও টেবিল intoোকানোর চেষ্টা করার সময় ত্রুটিটি ঘটবে না, বা কেবল একটি জিপ_কোড?
চাদ বার্চ

উত্তর:


92

সম্পাদনা: কনফিগারেশন-সংক্রান্ত রেজোলিউশনের সমাধান করার আগে, আপনি যদি ডিস্ক-স্পেসের বাইরে চলে না যান তবে প্রথমে পরীক্ষা করে দেখুন।

আপনার জন্য আপনার একটি খুব কম সর্বাধিক মাপ আছে বলে মনে হচ্ছে innodb_data_file_pathআপনার my.cnf, এই উদাহরণে

innodb_data_file_path = ibdata1:10M:autoextend:max:512M

সংযুক্ত সমস্ত ইনডোডাব টেবিলগুলিতে আপনি 512MB এর বেশি ডেটা হোস্ট করতে পারবেন না।

হতে পারে আপনি ব্যবহার করে একটি ইনোডাব-প্রতি-টেবিল স্কিমে স্যুইচ করা উচিত innodb_file_per_table


সি যেখানে আমরা এই

3
@ নাধ উবুন্টু 16.04 এ এটির একটি অংশ /etc/mysql/এবং আংশিকভাবে অতিরিক্ত ফাইলে বিভক্ত/etc/mysql/conf.d
মার্টিন সি

আমার innodb_data_file_pathলাইনটি যুক্ত করার পরে এবং পরিষেবাগুলি /etc/mysql/mysql.conf.d/mysqld.cnfপুনরায় চালু করার পরে কাজ করেছিলmysqlapache2
টিমাহ

81

আর একটি সম্ভাব্য কারণ পার্টিশন পূর্ণ হওয়া - এখন আমার ক্ষেত্রে এটি ঘটেছে।


1
এটি সর্বদা চেক করা উচিত। সর্বদা পাওয়ার কর্ডে ফিরে যান, আমি এই বহুবার হোঁচট খেয়েছি।
স্টিভেন চার্চ

1
আপনি MySQL কনফিগারেশনটি পরিবর্তন করার চেষ্টা করে আমাকে কয়েক ঘন্টা বাঁচিয়েছেন। প্রাথমিক পার্টিশনটি পূর্ণ ছিল। মাইএসকিএল ডাটাবেসটিকে ডেটা পার্টিশনে স্থানান্তরিত করতে হবে এবং তারপরে একটি নরম লিঙ্ক তৈরি করতে হবে
গণেশ কৃষ্ণন

2
df -hচেক ডিস্ক আকারের জন্য ব্যবহার করুন
অমিত বেরা

25

আপনি একই ত্রুটিটিও পেয়ে যাবেন ত্রুটি 1114 (HY000): সারণী '# sql-310a_8867d7f' পূর্ণ

যদি আপনি কোনও টেবিলটিতে একটি সূচক যুক্ত করার চেষ্টা করেন যা স্টোরেজ ইঞ্জিন মেমোরি ব্যবহার করছে।


এটি আমার সাথে ঘটেছিল তবে মনে হয়েছিল আমার ক্লায়েন্টটি ভুল সিনট্যাক্স ব্যবহার করছে। একটি সাধারণ সাথে একই সূচক যুক্ত করার সময় ALTER TABLE my_table ADD INDEX my_index (column_a, column_b);এটি কাজ করে।
থিফার

22

INNO_DB টেবিলগুলির জন্য আপনাকে my.cnf এ সীমাবদ্ধতা ক্যাপ সেটটি পরিবর্তন করতে হবে। এই মেমরি সীমাটি পৃথক টেবিলগুলির জন্য সেট করা হয়নি, এটি সমস্ত টেবিলের সম্মিলনের জন্য সেট করা আছে।

আপনি যদি চান মেমরিটি 512 এমবিতে স্বয়ংক্রিয়ভাবে প্রসারিত হয়

innodb_data_file_path = ibdata1:10M:autoextend:max:512M

আপনি যদি সীমাটি জানেন না বা সীমাবদ্ধতা ক্যাপ রাখতে চান না, আপনি এটি এটি এইভাবে সংশোধন করতে পারেন

innodb_data_file_path = ibdata1:10M:autoextend

আমরা অ্যামাজনে আমাদের ডিডিবিবি হোস্ট করেছি এবং এটি অটো এক্সেটেন্ড দিয়ে কনফিগার করা হয়েছে। তবে কনফিগার করা সঞ্চিত সীমাতে পৌঁছানোর কারণেই আমরা ধরে নিয়েছিলাম যে একই সমস্যা ছিল
borjab

12

এই ত্রুটিটি এটির ক্ষেত্রেও উপস্থিত হয় যদি সেই পার্টিশনে থাকা tmpdirঅংশটি পূরণ করে (পরিবর্তিত টেবিল বা অন্য কোনও কারণে)


11

আমার ক্ষেত্রে, এটি ছিল কারণ ইব্বদাটা 1 ফাইলের হোস্টিং পার্টিশনটি পূর্ণ ছিল।


10

আপনি যে পার্টিশনে মাইএসকিএল টেবিল সঞ্চিত (সাধারণত / var / lib / mysql) বা অস্থায়ী টেবিলগুলি সঞ্চিত (সাধারণত / টিএমপি) সেখানে আপনার স্থানের বাইরে চলে যেতে পারে।

আপনি এটি করতে চাইতে পারেন: - সূচক তৈরির সময় আপনার মুক্ত স্থান নিরীক্ষণ করুন। - tmpdir মাইএসকিউএল ভেরিয়েবলটি একটি অন্য জায়গায় চিহ্নিত করুন। এটির জন্য একটি সার্ভার পুনঃসূচনা দরকার।


8

আমিও 8 গিগাবাইট স্ক্যুয়েল ডাটাবেস ফাইলটি আমদানির সময় এই ত্রুটির মুখোমুখি হয়েছি। আমার মাইএসকিএল ইনস্টলেশন ড্রাইভ চেক করেছে। ড্রাইভে কোনও জায়গা বাকি ছিল না। সুতরাং অযাচিত আইটেমগুলি সরিয়ে আমার ডেটাবেস আমদানি কমান্ডটি পুনরায় চালিয়ে কিছু জায়গা পেয়েছে। এবার এটি সফল ছিল।



6

আপনি innodb_file_per_tableঅপশনটি সক্ষম না করা না হলে InnoDBসব তথ্য এক ফাইলে রাখেন, সাধারণত ডাকা হয় ibdata1

এই ফাইলটির আকার পরীক্ষা করুন এবং এটি চালিত ড্রাইভে আপনার পর্যাপ্ত ডিস্কের জায়গা রয়েছে কিনা তা পরীক্ষা করুন।


5

আমাদের ছিল: এসকিউএসএলসেট [এইচওয়াই 1000]: সাধারণ ত্রুটি: 1114 টেবিলটি 'ক্যাটালগ_প্রডাক্ট_ ইন্ডেক্স_প্রাইস_বান্ডেল_সেল_টিএমপি' পূর্ণ

এর দ্বারা সমাধান:

ডিবি কনফিগারেশন সম্পাদনা করুন:

ন্যানো /etc/my.cnf

tmp_table_size = 256M max_heap_table_size = 256M

  • পুনরায় আরম্ভ করুন ডিবি

1
এই 512 এম সেটিংস বিপজ্জনক। তারা জটিল নির্বাচনের মধ্যে টেম্প টেবিলগুলির জন্য সর্বাধিক মেমরির আকার নিয়ন্ত্রণ করে। এটি কেবল "প্রতি সংযোগ" নয়, "প্রতি টিএমপি টেবিল "ও রয়েছে। সুতরাং, এই মানগুলি সহজেই আপনাকে র‌্যামের বাইরে চলে যেতে পারে।
রিক জেমস

4

মাইএসকিউএল ডকুমেন্টস উদ্ধৃত করতে।

InnoDB স্টোরেজ ইঞ্জিন একটি টেবিল স্পেসের মধ্যে InnoDB টেবিলগুলি বজায় রাখে যা বেশ কয়েকটি ফাইল থেকে তৈরি করা যেতে পারে। এটি একটি সারণিকে সর্বাধিক পৃথক ফাইলের আকার ছাড়িয়ে যাওয়ার অনুমতি দেয়। টেবিলস্পেসে কাঁচা ডিস্ক পার্টিশন অন্তর্ভুক্ত থাকতে পারে, যা অত্যন্ত বড় টেবিলগুলিকে অনুমতি দেয়। সর্বাধিক টেবিলস্পেসের আকার T৪ টিবি।

আপনি যদি InnoDB টেবিল ব্যবহার করে থাকেন এবং InnoDB টেবিল স্পেসের ঘরে বাইরে চলে যান। এই ক্ষেত্রে, সমাধানটি ইনোডিবি টেবিলস্পেস বাড়ানো। বিভাগ ১৩.২.৫, [“ইনোডিবি ডেটা এবং লগ ফাইল যুক্ত করা, সরানো বা পুনরায় আকার দেওয়া” দেখুন]]


4

আমার ক্ষেত্রে, এটি কেবল কারণ যে মাইএসকিএল সার্ভারটি একটি অ্যাপ্লিকেশনের সাথে একসাথে চলে, যারা ডিস্কে পূর্ণ রয়েছে এমন অনেকগুলি লগ লিখেন।

ডিস্কের পর্যাপ্ত জায়গার ব্যবহার রয়েছে কিনা তা আপনি পরীক্ষা করতে পারেন

df -h

যদি ডিস্ক ব্যবহারের শতাংশটি 100% হয় তবে কোন ডিরেক্টরিটি খুব বড় তা খুঁজে পেতে আপনি এই আদেশটি ব্যবহার করতে পারেন

du -h -d 1 /

4

ডকার ব্যবহারকারী: আপনি যখন আপনার ডকার চিত্রের প্রায় 90% মাপ দিয়েছেন তখন এটিও ঘটে সীমাটির সীমাবদ্ধ করেছেন (মনে হয় 10% ক্যাশে দেওয়ার জন্য প্রয়োজন)। শব্দগুচ্ছটি বিভ্রান্তিকর, কারণ এর সহজরূপে বলতে হয় মূলত সমস্ত কিছুর জন্য ডকার জায়গার পরিমাণ ব্যবহার করতে পারে।

ঠিক করতে, আপনার ডকার ডেস্কটপ সেটিংস> ডিস্ক> স্লাইডারটিকে ডানদিকে কিছুটা সরান> প্রয়োগ করুন।

এখানে চিত্র বর্ণনা লিখুন


2

CentOS 7 এ মাইএসকিউএল পরিষেবাটি কেবল থামানো এবং শুরু করা আমার জন্য এটি স্থির করে।

sudo service mysql stop

sudo service mysql start


আশ্চর্যজনকভাবে এটি আমার পক্ষেও কাজ করেছে .... এমন কোনও পার্টিশন নেই যা ৮০% এর বেশি পূর্ণ ছিল এবং কেবল এটি পুনরায় আরম্ভের সাথে সংশোধন করে।
n0nag0n

2

কম ডিস্কের জায়গার কারণে আমি একই সমস্যার মুখোমুখি হয়েছি। এবং পার্টিশন যা আইবডাটা 1 ফাইল হোস্ট করছে যা ইনোডিবি অবকাঠামোটির জন্য সিস্টেম টেবিল স্পেসটি পূর্ণ ছিল।


2

আমি এই সমস্যাটি অনুভব করছিলাম ... আমার ক্ষেত্রে, আমি আমার ডেডিকেটেড সার্ভারে সঞ্চয়স্থান শেষ করে ফেলছি। যদি অন্য সমস্ত কিছু ব্যর্থ হয় এবং ডিস্কের স্থান বাড়াতে বা অবাঞ্ছিত ডেটা বা ফাইলগুলি সরাতে বিবেচনা করে তা পরীক্ষা করে দেখুন।


1

আমার ক্ষেত্রে সার্ভার মেমরি পূর্ণ ছিল তাই ডিবি টেম্পোর ডেটা লিখতে পারেনি। এটি সমাধান করার জন্য আপনাকে কেবল আপনার ড্রাইভে কিছু জায়গা তৈরি করতে হবে।


1

আমি ডেটাবেস যেখানে অবস্থিত ভগ্ন VM- তে উপলব্ধ মেমরির পরিমাণ বাড়িয়ে এই সমস্যার সমাধান করেছি।


1

আমার ক্ষেত্রে, আমি একটি বদল টেবিল কমান্ড চালানোর চেষ্টা করছিলাম এবং উপলব্ধ ডিস্কের স্থানটি টেবিলের আকারের চেয়ে কম ছিল। একবার, আমি ডিস্কের জায়গা বাড়িয়েছি সমস্যাটি চলে গেল।



-1

এটি প্রকাশ্য লেনদেনের সংখ্যার জন্য InnoDB সীমাও হতে পারে:

http://bugs.mysql.com/bug.php?id=26590

1024 লেনদেনে, যেগুলি পূর্বাবস্থায় ফিরেছে (যেমন কোনও ডাটা সম্পাদিত), InnoDB কাজ করতে ব্যর্থ হবে


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