এসকিউএল সার্ভারে স্থানীয় এবং বৈশ্বিক অস্থায়ী সারণী


156

এসকিউএল সার্ভারে স্থানীয় এবং বৈশ্বিক অস্থায়ী টেবিলগুলির মধ্যে পার্থক্য কী?


2
এখানে এই সম্পর্কে কয়েকটি সংক্ষিপ্ত বিবরণ রয়েছে, এখানে ক্লিক করুন
জয়েশ সোরথিয়া

5
সারণী ভেরিয়েবলগুলি ব্যবহার করার সময় সতর্কতা অবলম্বন করুন। আপনি যদি এগুলি কোনও ক্যোয়ারিতে ব্যবহার করেন তবে তারা সূচিযুক্ত না হওয়ায় তারা আপনার ক্যোয়ারী পরিকল্পনায় মারাত্মক পারফরম্যান্স সমস্যার সৃষ্টি করতে পারে।

প্রকৃতপক্ষে, টেম্প টেবিলগুলি প্রয়োজনে সূচকযুক্ত করা যেতে পারে, তবে এটি সময় এবং সংস্থানগুলিও লাগে, সুতরাং এটি এখনও কর্মক্ষমতা বা সংস্থান সংক্রান্ত সমস্যার কারণ হতে পারে।
অ্যান্ড্রু স্টিটজ

উত্তর:


114

আমি এই ব্যাখ্যাটি বেশ স্পষ্ট দেখতে পেয়েছি (এটি টেকনেটের খাঁটি অনুলিপি ):

অস্থায়ী টেবিল দুটি ধরণের রয়েছে: স্থানীয় এবং বৈশ্বিক। স্থানীয় অস্থায়ী টেবিলগুলি কেবল তখনই তাদের স্রষ্টাদের কাছে এসকিউএল সার্ভারের উদাহরণের সাথে একই সংযোগের সময় দৃশ্যমান হয় যেমন টেবিলগুলি প্রথম তৈরি করা হয়েছিল বা রেফারেন্স করা হয়েছিল। স্থানীয় অস্থায়ী টেবিলগুলি ব্যবহারকারী এসকিউএল সার্ভারের উদাহরণ থেকে সংযোগ বিচ্ছিন্ন করার পরে মুছে ফেলা হয়। গ্লোবাল অস্থায়ী টেবিলগুলি যে কোনও ব্যবহারকারীর এবং যে কোনও সংযোগ তৈরি হওয়ার পরে তাদের কাছে দৃশ্যমান এবং যখন সারণীটি উল্লেখ করা হয় এমন সমস্ত ব্যবহারকারী এসকিউএল সার্ভারের উদাহরণ থেকে সংযোগ বিচ্ছিন্ন করে deleted


দুর্দান্ত, সহায়ক উত্তর! এসকিউএল সার্ভার দ্বারা / যখন গ্লোবাল টেম্প টেবিলগুলি স্বয়ংক্রিয়ভাবে পরিষ্কার হয়ে যায় সে সম্পর্কে আমি সুনির্দিষ্ট তথ্যের সন্ধান করছিলাম।
কুইল

খুব স্পষ্ট এবং সংক্ষিপ্ত উত্তর। গ্লোবাল টেম্প টেবিলগুলির জন্য কেউ কি ভাল ব্যবহারের ক্ষেত্রে ভাবতে পারেন? স্থানীয় টেম্প টেবিলগুলির সাথে তার বিপরীতে তাদের উদ্দেশ্যকে চিত্রিত করে এমন একটি?
ট্রেভর 21

335
  • সারণী ভেরিয়েবল ( DECLARE @t TABLE) কেবল এটির সংযোগের জন্য দৃশ্যমান যা এটি তৈরি করে এবং ব্যাচ বা সঞ্চিত প্রক্রিয়া শেষ হয়ে গেলে মুছে ফেলা হয়।

  • স্থানীয় অস্থায়ী টেবিলগুলি ( CREATE TABLE #t) কেবল এটির সংযোগের জন্য দৃশ্যমান যা এটি তৈরি করে এবং সংযোগটি বন্ধ হয়ে গেলে মুছে ফেলা হয়।

  • বিশ্বব্যাপী অস্থায়ী টেবিলগুলি ( CREATE TABLE ##t) প্রত্যেকের কাছে দৃশ্যমান এবং সেগুলি মুছে ফেলা হবে যখন সেগুলি উল্লেখ করা সমস্ত সংযোগ বন্ধ হয়ে গেছে।

  • টেম্পডিবি স্থায়ী টেবিলগুলি ( USE tempdb CREATE TABLE t) সবার কাছে দৃশ্যমান এবং সার্ভার পুনরায় চালু হওয়ার পরে মুছে ফেলা হয়।


55
এটি উল্লেখ করার মতো মূল্য: স্থানীয় অস্থায়ী টেবিলগুলি মুছে ফেলা হবে যখন সেগুলি তৈরি করার সুযোগটি বন্ধ থাকবে। সুতরাং, যদি আপনি কোনও স্প্রোকের অভ্যন্তরে কোনও স্থানীয় টেম্প টেবিল তৈরি করেন এবং তারপরে চেষ্টা করুন এবং সেই স্প্রোকের বাইরে এটি অ্যাক্সেস করুন - এটি উপস্থিত থাকবে না।

উইলের জন্য +1 আমি একটি স্থানীয় অস্থায়ী টেবিলটিকে অপটিমাইজার হিসাবে ব্যবহার করার চেষ্টা করছিলাম এবং আমি একটি স্টোর করা পদ্ধতিটি "তৈরি করুন এবং এটি উপস্থিত না থাকলে পপুলেট করুন" প্রারম্ভিক হিসাবে ব্যবহার করার চেষ্টা করছিলাম। যেমনটি আপনি বলেছেন, আপনি যদি কোনও বিশ্বব্যাপী অস্থায়ী টেবিল ব্যবহার না করেন তবে এটি কাজ করে না।
কুইলব্রেকার

9
"মুছে ফেলা হয় যখন সমস্ত সংযোগগুলি সেগুলিকে রেফারেন্সযুক্ত করে বন্ধ করে দেয়" - "যা তাদের উল্লেখ করেছে" এর অর্থ কী? যদি একটি সংযোগ # 1 থেকে একটি স্টোরেডপ্রস একটি ## টেম্পটেবল তৈরি করে তবে আমি এটি অন্য সংযোগ থেকে দেখতে পাব # 2 বলে 10 মিনিট পরে (যদি সেই সংযোগটি # 2 সারণী তৈরির সময় সক্রিয় ছিল?) উত্তর: বিশ্বব্যাপী অস্থায়ী টেবিলগুলি স্বয়ংক্রিয়ভাবে বাদ পড়লে সারণি তৈরি করে টেবিলটি শেষ হয়েছে এবং অন্যান্য সমস্ত কাজগুলি তাদের উল্লেখ করা বন্ধ করে দিয়েছে। (বিভিন্ন উত্তরে এই পৃষ্ঠায় আরও দেখুন)
4b4 এ টোনে

আমি পরবর্তী যুক্তি দ্বারা প্রয়োজনীয় স্থানীয় অস্থায়ী টেবিলগুলি (# টি) তৈরির জন্য একটি সঞ্চিত পদ্ধতি ব্যবহার করার চেষ্টা করেছি, তবে এটি প্রমাণিত হয়েছে যে পিতামাতাকে সঞ্চিত প্রক্রিয়া কলগুলির জন্য তাদের উপলব্ধ হওয়ার জন্য পিতামাতার সঞ্চিত পদ্ধতিটি তাদের তৈরি করতে হয়েছিল। এটি একটি দুঃখজনক বিষয় ছিল, কারণ আমাদের কাছে প্রচুর পরিমাণে সঞ্চিত প্রক্রিয়া রয়েছে যা একইভাবে টেবিলগুলি সেট আপ করতে হবে এবং সাধারণ স্প্রোকগুলিকে ডেকে আনতে হবে। গ্লোবাল টেম্প টেবিলগুলি কি এই ক্ষেত্রে কাজ করতে পারে যেখানে বাচ্চাদের কল একটি ভাইবোন দ্বারা তৈরি টেবিলগুলিতে অ্যাক্সেস পায়? আমরা এসকিউএল সার্ভার 2008 ব্যবহার করছি
ব্র্যান্ডন

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

12

১) স্থানীয় অস্থায়ী টেবিলটি কেবল সংযোগের সময়কালের জন্য বা যৌগিক বিবৃতিটির ভিতরে সংশ্লেষের বিবরণের সময়কালের জন্য নির্ধারিত থাকে।

স্থানীয় অস্থায়ী টেবিলগুলি কেবলমাত্র এসকিউএল সার্ভার সেশন বা সংযোগ (যার অর্থ একক ব্যবহারকারীর জন্য) উপলব্ধ থাকে যা টেবিলগুলি তৈরি করে। সারণি তৈরি করা সেশনটি বন্ধ হয়ে গেলে এগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়। স্থানীয় অস্থায়ী টেবিলের নামটি একক হ্যাশ ("#") চিহ্ন দিয়ে তাকানো থাকে।

CREATE TABLE #LocalTemp
(
 UserID int,
 Name varchar(50), 
 Address varchar(150)
)
GO
insert into #LocalTemp values ( 1, 'Name','Address');
GO
Select * from #LocalTemp

স্থানীয় টেম্প টেবিলের সুযোগ বর্তমান ব্যবহারকারীর বর্তমান সেশনে বিদ্যমান ক্যোয়ারী উইন্ডোতে বিদ্যমান। আপনি যদি বর্তমান ক্যোয়ারী উইন্ডোটি বন্ধ করবেন বা একটি নতুন কোয়েরি উইন্ডোটি খুলবেন এবং উপরে তৈরি টেম্প টেবিলটি সন্ধান করার চেষ্টা করবেন, এটি আপনাকে ত্রুটি দেবে।


২) একটি গ্লোবাল অস্থায়ী টেবিলটি ডাটাবেসে স্থায়ীভাবে থেকে যায়, তবে সারিগুলি কেবলমাত্র একটি প্রদত্ত সংযোগের মধ্যেই উপস্থিত থাকে। সংযোগ বন্ধ হয়ে গেলে বিশ্বব্যাপী অস্থায়ী টেবিলের ডেটা অদৃশ্য হয়ে যায়। যাইহোক, পরবর্তী সময় ডাটাবেস খোলার সময় সারণির সংজ্ঞা অ্যাক্সেসের জন্য ডাটাবেসের সাথে থাকে।

গ্লোবাল টেম্প টেবিলগুলি সমস্ত এসকিউএল সার্ভার সেশন বা সংযোগগুলির জন্য উপলব্ধ (যার অর্থ সমস্ত ব্যবহারকারী)। এগুলি যে কোনও এসকিউএল সার্ভার সংযোগ ব্যবহারকারী দ্বারা তৈরি করা যেতে পারে এবং সমস্ত এসকিউএল সার্ভার সংযোগ বন্ধ হয়ে গেলে এগুলি স্বয়ংক্রিয়ভাবে মোছা হয়। গ্লোবাল অস্থায়ী টেবিলের নামটি ডাবল হ্যাশ ("##") চিহ্ন দিয়ে তাকানো থাকে।

CREATE TABLE ##GlobalTemp
(
 UserID int,
 Name varchar(50), 
 Address varchar(150)
)
GO
insert into ##GlobalTemp values ( 1, 'Name','Address');
GO
Select * from ##GlobalTemp

স্থানীয় অস্থায়ী টেবিলগুলি কেবলমাত্র বর্তমান এসকিউএল সার্ভার সংযোগের জন্য দৃশ্যমান থাকাকালীন সমস্ত এসকিউএল সার্ভার সংযোগের কাছে দৃশ্যমান।


2
গ্লোবাল টেম্প টেবিলের আপনার সংজ্ঞাটি আমি কীভাবে এটি আচরণ করব (অন্যান্য ডিবি থেকে আগত) তা প্রত্যাশা করি তবে আমার পরীক্ষাটি দেখায় যে এসকিউএল সার্ভারে আসলে যা ঘটে তা হ'ল: "সারণী তৈরির সেশনটি যখন স্বয়ংক্রিয়ভাবে অস্থায়ী টেবিলগুলি সরে যায় তখন সমাপ্ত এবং অন্যান্য সমস্ত কাজ তাদের উল্লেখ করা বন্ধ করে দিয়েছে "
নিকোলায়

11

অনলাইন বই থেকে উদ্ধৃতি:

স্থানীয় অস্থায়ী টেবিলগুলি কেবল বর্তমান অধিবেশনে দৃশ্যমান; গ্লোবাল অস্থায়ী টেবিলগুলি সমস্ত সেশনে দৃশ্যমান।

অস্থায়ী টেবিলগুলি সুযোগের বাইরে চলে গেলে স্বয়ংক্রিয়ভাবে বাদ পড়ে যায়, যদি না ড্রপ টেবিল ব্যবহার করে স্পষ্টভাবে বাদ দেওয়া হয়:

  • সঞ্চিত পদ্ধতিতে তৈরি স্থানীয় অস্থায়ী টেবিলটি স্বয়ংক্রিয়ভাবে বাদ দেওয়া হয় যখন সঞ্চিত প্রক্রিয়াটি সম্পূর্ণ হয়। টেবিলটি সারণী তৈরি করে এমন স্টোরেজ পদ্ধতি দ্বারা নির্ধারিত কোনও নেস্টেড স্টোরেজ পদ্ধতি দ্বারা উল্লেখ করা যেতে পারে। সারণীটি সেই প্রক্রিয়া দ্বারা উল্লেখ করা যায় না যা সারণী তৈরি করে এমন স্টোরেজ পদ্ধতি বলে।
  • অন্যান্য সমস্ত স্থানীয় অস্থায়ী সারণী বর্তমান অধিবেশন শেষে স্বয়ংক্রিয়ভাবে বাদ দেওয়া হবে।
  • সারণী তৈরি করা সেশনটি শেষ হয়ে গেলে এবং অন্যান্য সমস্ত কাজগুলি সেগুলি উল্লেখ করা বন্ধ করে দিলে গ্লোবাল অস্থায়ী টেবিলগুলি স্বয়ংক্রিয়ভাবে বাদ যায়। একটি টাস্ক এবং একটি টেবিলের মধ্যে সংযোগ কেবলমাত্র একটি একক লেনদেন-এসকিউএল বিবৃতিটির জীবনের জন্য বজায় রাখা হয়। এর অর্থ হ'ল সর্বশেষ লেনদেন-এসকিউএল স্টেটমেন্টটি শেষ হওয়ার পরে একটি বিশ্বব্যাপী অস্থায়ী টেবিলটি বাদ দেওয়া হয়েছে যা সেশনটি শেষ হওয়ার পরে সক্রিয়ভাবে সারণীটি উল্লেখ করেছিল।

0

স্থানীয় অস্থায়ী সারণী : আপনি যদি স্থানীয় অস্থায়ী টেবিলগুলি তৈরি করেন এবং তারপরে অন্য সংযোগটি খোলেন এবং ক্যোয়ারীটি চেষ্টা করে দেখুন, আপনি নীচের ত্রুটি পাবেন।

অস্থায়ী সারণীগুলি কেবল সেগুলি তৈরি করে যা সেগুলি তৈরি করে within

গ্লোবাল অস্থায়ী সারণী : কখনও কখনও, আপনি একটি অস্থায়ী টেবিল তৈরি করতে চাইতে পারেন যা অন্যান্য সংযোগগুলি অ্যাক্সেসযোগ্য। এই ক্ষেত্রে, আপনি বিশ্বব্যাপী অস্থায়ী টেবিলগুলি ব্যবহার করতে পারেন।

গ্লোবাল অস্থায়ী টেবিলগুলি কেবল তখনই নষ্ট হয়ে যায় যখন এর সাথে সম্পর্কিত সমস্ত সেশনগুলি বন্ধ হয়ে যায়।


0

এটি উল্লেখযোগ্য যে এখানে রয়েছে: ডাটাবেস স্কোপড গ্লোবাল অস্থায়ী টেবিলগুলি (বর্তমানে কেবলমাত্র অ্যাজুরি এসকিউএল ডেটাবেস দ্বারা সমর্থিত)।

এসকিউএল সার্ভারের জন্য গ্লোবাল অস্থায়ী টেবিলগুলি (## টেবিলের নাম দিয়ে শুরু করা) টেম্পটিডিবিতে সংরক্ষণ করা হয় এবং পুরো এসকিউএল সার্ভারের উদাহরণগুলিতে সমস্ত ব্যবহারকারীর সেশনের মধ্যে ভাগ করা হয়।

অ্যাজুর এসকিউএল ডাটাবেস বিশ্বব্যাপী অস্থায়ী টেবিলগুলিকে সমর্থন করে যা টেম্পডিবিতেও সংরক্ষণ করা হয় এবং ডাটাবেস স্তরে যায় op এর অর্থ হ'ল বৈশ্বিক অস্থায়ী টেবিলগুলি একই অজুর এসকিউএল ডেটাবেসের মধ্যে সমস্ত ব্যবহারকারীর সেশনের জন্য ভাগ করা আছে। অন্যান্য ডাটাবেসগুলির ব্যবহারকারীর সেশনগুলি বিশ্বব্যাপী অস্থায়ী টেবিলগুলিতে অ্যাক্সেস করতে পারে না।

-- Session A creates a global temp table ##test in Azure SQL Database testdb1
-- and adds 1 row
CREATE TABLE ##test ( a int, b int);
INSERT INTO ##test values (1,1);

-- Session B connects to Azure SQL Database testdb1 
-- and can access table ##test created by session A
SELECT * FROM ##test
---Results
1,1

-- Session C connects to another database in Azure SQL Database testdb2 
-- and wants to access ##test created in testdb1.
-- This select fails due to the database scope for the global temp tables 
SELECT * FROM ##test
---Results
Msg 208, Level 16, State 0, Line 1
Invalid object name '##test'

পরিবর্তিত ডেটাবেস কনফিগারেশন পরিবর্তন করুন

GLOBAL_TEMPORARY_TABLE_AUTODROP = { ON | OFF }

প্রয়োগগুলি: অ্যাজুর এসকিউএল ডেটাবেস (বৈশিষ্ট্যটি জনসাধারণের পূর্বরূপে রয়েছে)

গ্লোবাল অস্থায়ী টেবিলগুলির জন্য অটো-ড্রপ কার্যকারিতা সেট করার অনুমতি দেয়। ডিফল্টটি চালু আছে, যার অর্থ কোনও অস্থায়ী ব্যবহার না করা অবস্থায় গ্লোবাল অস্থায়ী টেবিলগুলি স্বয়ংক্রিয়ভাবে বাদ পড়ে। অফে সেট করা থাকলে, বিশ্বব্যাপী অস্থায়ী টেবিলগুলিকে স্পষ্টভাবে একটি ড্রপ টেবিল বিবৃতি ব্যবহার করে ফেলে দেওয়া উচিত বা স্বয়ংক্রিয়ভাবে সার্ভার পুনঃসূচনাতে ফেলে দেওয়া হবে।

অ্যাজুরে এসকিউএল ডেটাবেস একক ডাটাবেস এবং ইলাস্টিক পুলের সাহায্যে এই বিকল্পটি এসকিউএল ডাটাবেস সার্ভারের পৃথক ব্যবহারকারী ডাটাবেসে সেট করা যেতে পারে। এসকিউএল সার্ভার এবং অ্যাজুরি এসকিউএল ডেটাবেস পরিচালিত দৃষ্টান্তে, এই বিকল্পটি টেম্পডিবিতে সেট করা আছে এবং পৃথক ব্যবহারকারী ডেটাবেসগুলির সেটিংটির কোনও প্রভাব নেই।


0

আমি কোনও উত্তর দেখিনি যা ব্যবহারকারীদের দেখায় যেখানে আমরা একটি গ্লোবাল টেম্প সারণী পেতে পারি। এসএসএমএসের মধ্যে নেভিগেট করার সময় আপনি একই স্থানে স্থানীয় এবং গ্লোবাল টেম্প টেবিলগুলি দেখতে পারেন। এই লিঙ্কটি থেকে নীচে নেওয়া স্ক্রিনশট ।

ডাটাবেস -> সিস্টেম ডাটাবেস -> টেম্পডিবি -> অস্থায়ী সারণী

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

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