কয়েক মিলিয়ন সারি সহ একটি সারণীতে কলাম সংজ্ঞা পরিবর্তন করার সবচেয়ে কার্যকরী উপায় কী


9

লক্ষ লক্ষ সারি রয়েছে এমন একটি সারণীতে আমাকে নাল নট থেকে নূলে পরিবর্তন করতে হবে। আমি একটি সহজ চেষ্টা করেছি

alter table Table1 ALTER COLUMN Column1 XML NULL

তবে এটি চিরকাল লাগে takes সুতরাং এখানে আমার প্রশ্নগুলি:

  1. কেন পরিবর্তনটি প্রয়োগ করতে এতক্ষণ সময় লাগে?
  2. এটা করতে একটি ভাল উপায় আছে কি?

উত্তর:


3

1) এক কি টেবিলের সম্পূর্ণ কাঠামো সম্পর্কে আরও তথ্যের প্রয়োজন হবে + নন ক্লাস্টারড ইনডেক্সগুলি সঠিকভাবে যা ঘটছে তা নির্ধারণ করার জন্য তবে আমার সন্দেহ নুল বিটম্যাপের সাথে সম্পর্কিত is

বিষয়টি সম্পর্কে আরও বিশদের জন্য দয়া করে পড়ুন। http://www.sqlskills.com/BLOGS/PAUL/post/Misconceptions-around-null-bitmap-size.aspx

http://www.sqlskills.com/BLOGS/PAUL/post/A-SQL-Server-DBA-myth-a-day-(630)-three-null-bitmap-myths.aspx

২) হ্যাঁ, যদি আপনার স্টোরেজ স্পেস থাকে, সঠিক নালাগ্রতা সহ একটি নতুন টেবিল তৈরি করুন এবং অতিরিক্ত লগ বৃদ্ধি এড়াতে একাধিক ব্যাচে ডেটা স্থানান্তর করুন এবং নীচে তালিকাভুক্ত কৌশলটি ব্যবহার করে টেবিলটি স্যুইচ করুন। আমি এগুলি বেশ কয়েকবারই কম সময়ে কোনও ডাউনটাইম করেই করেছি।

http://jahaines.blogspot.com/2009/12/sql-server-2005-how-to-move-10-millions.html


6

এটি কি আরও দ্রুত হবে:

  1. এর সঠিক সংজ্ঞা সহ একটি নতুন টেবিল তৈরি করুন Column1
  2. INSERT INTO <NewTable> SELECT * FROM <OriginalTable>;
  3. অরিজিনাল টেবিলের নাম অরিজিনাল টেবিল_ল্ড করুন; অরিজিনাল টেবেলে নতুন টেবিলটির নামকরণ করুন
  4. অরিজিনাল টেবিল_ল্ডকে বৈধ করুন এবং ছেড়ে দিন

এখানে সুবিধাটি হ'ল আপনি অপারেশনের সময়কালের জন্য মূল টেবিলটিতে লকটি ধরে রাখেন না। টেবিলটি কেবল পুনরায় নামকরণের পর্যায়ে লক করা উচিত। (এটি ধরে নেওয়া হয় যে এসকিউএল সার্ভার কোনও অবজেক্ট স্তরের নাম পরিবর্তনকে সমর্থন করে)


হ্যাঁ, এসকিউএল সার্ভার সিস্টেম সঞ্চিত পদ্ধতি ব্যবহার করে অবজেক্ট স্তরের নামগুলি সমর্থন করে sp_rename
গনসালু

আমি 1 মিনিটের মধ্যে 3.5M সারি দিয়ে এইভাবে একটি কলাম পরিবর্তন করতে সক্ষম হয়েছি।
মোহসেন আফশিন

2

নট নুল থেকে ন্যূনাল থেকে কলাম পরিবর্তন করার সময় প্রতিটি সারি স্পর্শ করা দরকার, এ কারণেই এটি সম্পূর্ণ হতে এত বেশি সময় নেয়। এটি কম সময় লাগানোর কোনও উপায় নেই।


1

আরেকটি বিকল্প হ'ল প্রশ্নের সারণিতে সঠিক সংজ্ঞা সহ একটি নতুন কলাম তৈরি করা, পুরানো কলাম থেকে ডেটা সহ কলামটি আপডেট করুন, তারপরে পুরানো কলামটি বাদ দিন।

অথবা আপনি এসই থেকে আসা একটি পুরানো পোস্ট উল্লেখ করতে পারেন যা কোনও আইএনটি কলামে অনুরূপ ইস্যুতে আচরণ করে।

/programming/4311559/sql-server-performance-for-alter-table-alter-column-change-data-type


আমার ক্ষেত্রে, আমার কলামটি কেবল NULL পূর্ণ, তাই আমি ভাবছি এটিই যাওয়ার উপায় হবে, ডান নামের সাথে একটি সম্পূর্ণ সম্পূর্ণ NULL কলাম তৈরি করাতে কোনও সময় নেওয়া উচিত নয় ... তারপরে পুরানো কলামটি মোছা, কয়েক মিলিয়ন সন্নিবেশ
জ্যাক

0

কমান্ডটি চলমান থাকাকালীন আপনি যদি এসকিউএল ক্রিয়াকলাপ মনিটরটি খোলেন তবে আপনি বলতে সক্ষম হবেন যে এটি আসলে এটি প্রক্রিয়া করছে কিনা বা এটি টেবিলের একচেটিয়া লকের কোনও রূপের জন্য অপেক্ষা করছে কিনা।

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