ورود

View Full Version : Blocked Process



Elham_gh
یک شنبه 23 بهمن 1384, 10:56 صبح
Blocked Process ها چطور به وجود میان؟( منظورم Dead Lock) نیست.
چطور باید رفعشون کرد؟

Elham_gh
یک شنبه 23 بهمن 1384, 12:19 عصر
خوب اینکه چطور به وجود میان رو فهمیدم.


1-Submitting queries with long execution times.
2-Canceling queries that were not committed or rolled back.
3-Applications that are not processing all results to completion.
4-Distributed client/server deadlocks.

حالا یک سوال دیگه از کجا بدونم از کدوم کانال به وجود میان؟؟ مثلا کدام Query باعث آن شده؟

و یک سوال دیگه . یکی از راههای جلوگیری از این قضیه استفاده از Set Lock_Timeout است.آیا این دستور باید در تمام stored procedure ها اجرا شود؟ اگر یکسری از Query ها بدون sp و از داخل برنامه اجرا شوند , تکلیف چیست؟

AminSobati
یک شنبه 23 بهمن 1384, 23:23 عصر
من دقیقا منظور شما رو متوجه نشدم. منظورتون Blocked By هستش که در قسمت Current Activity نشون میده؟

Elham_gh
دوشنبه 24 بهمن 1384, 12:30 عصر
نه. منظور من Process هایی است که Blocked می شوند. من 3 تا Blocked Process دارم.

AminSobati
دوشنبه 24 بهمن 1384, 18:08 عصر
در کجا اینها رو مشاهده میکنید؟

Elham_gh
دوشنبه 24 بهمن 1384, 18:14 عصر
در قسمت Current activity =>Locks / Process ID

Blocked Process ها با 2 نوع آیکن مختلف نشون داده می شوند. یکی نشان دهنده اینه که Process مورد نظر Block شده و آیکن دیگر نشان می دهد که این Process به واسطه یک Blocked Process دیگر Block شده

AminSobati
دوشنبه 24 بهمن 1384, 21:24 عصر
بنده هم که Current Activity رو عرض کردم!
در این قسمت میبینید که مثلا یک نفر ممکنه Block کرده باشه و بعضی دیگه Blocked By هستند. در 90 درصد مواقع، طولانی شدن یک Transaction (که به احتمال زیاد در حال ویرایش اطلاعات هستش) باعث میشه رکوردها در طول این مدت، تحت xlock قرار گرفته باشند لذا دسترسی سایر کاربرها (حتی برای خواندن اطلاعات) میسر نیست. برای شبیه سازی این حالت، در Query Analyzer دو Connection باز کنید. در اولی بنویسید:


use northwind
go

begin tran
update customers set companyname='test'

و اجرا کنید.
در دومی بنویسید: select * from customers و اجرا کنید
این دستور Block میشه و در Current Activity مشخصه.
زمانی که کاربر اول، Commit Tran یا Rollback Tran انجام بده، کاربر دوم کارش ادامه پیدا میکنه. اگر Current Activity رو Refresh کنید، اثری از Blocking دیده نمیشه. برای اطلاعات بیشتر و دانستن اینکه کار کاربرهای همزمان به چه شکل روی همدیگه تاثیر میگذارند، Transaction Isolation Level در Books Online رو مطالعه کنید

Elham_gh
دوشنبه 24 بهمن 1384, 21:32 عصر
بله ! علتهای متقاوتشو فهمیدم. اما سوال ایجاست
تو یکی از Blocked Process های من 459 تا Object دارم که Locked شدند. این چطور ممکنه؟!!!
و سوال دیگه از کجا بفهمم کدوم SP یا عامل باعث این مشکل شده که حلش کنم؟


1-Submitting queries with long execution times.
2-Canceling queries that were not committed or rolled back.
3-Applications that are not processing all results to completion.
4-Distributed client/server deadlocks.

AminSobati
دوشنبه 24 بهمن 1384, 22:24 عصر
این 459 تا Object آیا اکثرا اسمهای مشابه دارند و متعلق به یک Source هستند؟
برای اینکه متوجه بشین به چه شکل یک SPID دیگران رو Block کرده، ازش Properties بگیرین (آخرین دستور رو نشون میده). همچنین وقتی روی SPID کلیک میکنید، صفحه سمت راست تمام جزئیات Lock رو نشون میده، از اینجا اطلاعات بیشتری میشه بدست آورد

Elham_gh
دوشنبه 24 بهمن 1384, 22:37 عصر
همشون متعلق به یک جدول هستند با Lock های متفاوت
Last Command رو هم دیدم . اون اطلاعاتی نمی ده. با این همه من فردا باز چکش می کنم.

ممنون

AminSobati
دوشنبه 24 بهمن 1384, 22:50 عصر
اگر یک Transaction تعداد زیادی از اطلاعات رو ویرایش کنه، مثلا دستور Update با شرطی صادر بشه که 459 رکورد تحت تاثیر قرار بگیرند، همه اونها به عنوان Locked Object نمایش داده میشوند