সারণির সংখ্যার চেয়ে অটো বর্ধন কেন লাফ দেয়?


11

auto_incrementসঞ্চিত পদ্ধতি ব্যবহার করে বাল্ক সন্নিবেশ করার পরে একটি বিডস টেবিলের বিডিতে রেকর্ডকৃত মানটি আমি দেখতে পাচ্ছি এই অদ্ভুত আচরণের দ্বারা আমি খুব বিচলিত :

INSERT INTO Bids (itemID, buyerID, bidPrice)
 SELECT itemID, rand_id(sellerID, user_last_id), FLOOR((1 + RAND())*askPrice)
 FROM Items
 WHERE closing BETWEEN NOW() AND NOW() + INTERVAL 1 WEEK ORDER BY RAND() LIMIT total_rows;

উদাহরণস্বরূপ, যদি auto_incrementবিডির মান শুরুতে 101 হয় এবং আমি 100 টি সারি sertedোকানো হয় তবে শেষের মানটি 201 এর পরিবর্তে 213 হয়ে যায় However

নিম্নলিখিত পরীক্ষা করে দেখুন,

SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 1     |
| auto_increment_offset    | 1     |
+--------------------------+-------+

কেন ঘটছে তা আমার কোনও ধারণা নেই। auto incrementমানটি কী লাফিয়ে উঠতে পারে ?


মাইআইএসএএম বা ইনোডিবি টেবিলগুলি?
ক্রিশ্চিয়ান পোর্টা

@ ক্রিশ্চিয়ানপোর্টা, এটি ইনোডিবি।
প্রশ্ন ওভারফ্লো

আপনি কি আপনার show variables like '%innodb_autoinc_lock_mode%';আউটপুট ভাগ করতে পারেন ?
ক্রিশ্চিয়ান পোর্টা

আপনি কি নিশ্চিত যে টেবিলের সাথে আর কোনও সংযোগ / ক্রিয়াকলাপ নেই (সারি সন্নিবেশ করানো)?
ypercubeᵀᴹ

উত্তর:


10

এটি অস্বাভাবিক নয় এবং এর কয়েকটি কারণ রয়েছে। কখনও কখনও এটি ক্যোয়ারী রানার কাউন্টার রিসোর্সের সাথে বিতর্ক সংক্রান্ত সমস্যাগুলি হ্রাস করতে, আক্রান্ত টেবিলের সাথে একযোগে আপডেট থাকে যখন দক্ষতার উন্নতি করে optim কখনও কখনও এটি লেনদেনের কারণে ঘটে যা স্পষ্টতই ঘূর্ণিত হয়ে ফিরে আসে (বা কোনও ত্রুটির মুখোমুখি হওয়ার কারণে স্পষ্টতই ঘূর্ণায়মান)।

একটি auto_incrementকলামের একমাত্র গ্যারান্টি (বা IDENTITYএমএসএসকিউএলে এবং অন্যান্য নামগুলি ধারণাগুলি দিয়ে যায়) হ'ল প্রতিটি মানটি পূর্বের তুলনায় অনন্য এবং কখনই ছোট হবে না: যাতে আপনি অর্ডার দেওয়ার জন্য মানগুলিতে নির্ভর করতে পারেন তবে আপনি নির্ভর করতে পারবেন না তাদের ফাঁক আছে না।

আপনার যদি কলামের মানগুলির কোনও ফাঁক না থাকার দরকার হয় তবে মানগুলি নিজেই পরিচালনা করতে হবে, হয় ব্যবসায়ের যুক্তির অন্য স্তরে বা ট্রিগারের মাধ্যমে ডিবিতে (যদিও ট্রিগারগুলির সাথে সম্ভাব্য পারফরম্যান্সের বিষয়ে সতর্কতা অবলম্বন করুন), যদি আপনি নিজেরাই রোল করেন আপনাকে ডিবি ইঞ্জিনগুলি ফাঁক রেখে অনুমতি দিয়ে কাজ করবে এমন সমস্ত সমঝোতা / রোলব্যাক / ক্লিনআপ-আফ্র-ডিলিট / অন্যান্য সমস্যাগুলির সাথে লড়াই করতে হবে))


এই আচরণটি নিয়ে আলোচনা করা হচ্ছে এমন কোনও রেফারেন্স আপনি সরবরাহ করতে পারেন?
প্রশ্ন ওভারফ্লো

1
বিষয়টি সম্পর্কে এখানে বেশ কয়েকটি উল্লেখ রয়েছে, এসও এবং সাধারণভাবে। "পরিচয় ফাঁক", "অটো_সংশোধন ফাঁক" এবং এর জন্য আরও অনুসন্ধান করুন এবং আপনার প্রচুর আলোচনা খুঁজে পাওয়া উচিত। আপনি অনুসন্ধানটি আরও সুনির্দিষ্ট করে তুলতে আপনার ডিবিএমএস নাম যুক্ত করতে পারেন, যদিও এটি বেশ সাধারণ ধারণা, যাতে এটি কীভাবে বিশদভাবে কাজ করে তা হুডের নিচে না দেখলে কোনও বাস্তব পার্থক্য না ঘটে might
ডেভিড স্পিলিট

4
: মাইএসকিউএল জন্য বিস্তারিত দেখুন InnoDB মধ্যে AUTO_INCREMENT হ্যান্ডলিং :, যেখানে এটি উল্লেখ " বাল্ক টিপে" জন্য স্বয়ংক্রিয় বৃদ্ধি মান ফাঁক " ... লক মোড 1 বা 2 জন্য, ফাঁক কারণ বাল্ক টিপে সঠিক সংখ্যার জন্য ধারাবাহিক বিবৃতি মধ্যে ঘটতে পারে প্রতিটি বিবৃতি দ্বারা প্রয়োজনীয় স্বতঃবৃদ্ধি মানগুলি জানা যায় না এবং তাত্পর্যপূর্ণ সম্ভব ""
ypercubeᵀᴹ

@ টাইপ्यूब, ধন্যবাদ, এটি আপনার পক্ষে সবচেয়ে সহায়ক helpful
প্রশ্ন ওভারফ্লো 3 ই

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