Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вредная оптимизация для SQL 2008. Решите за 1000 руб.  [new]
mybrute
Member

Откуда:
Сообщений: 18
Всем привет,

Помогите решить проблему которая возникает только с SQL 2008
У меня есть набор тестов на PHP через ODBC: много инсертов, селектов и прочая нагрузка.

После этого следующий этап не совместимый с предыдущим.

2008 отрабатывает быстро, но когда я меняю базу (use master) и делаю селект на activity в базе (я его подсмотрел в SQL management studio) то получают 1 - кто еще там ! И изза этого все мои тесты не проходят.

SQL Server 2005 работает как положено.

Помогите решить проблему за 1000 WMR

ПХП тест тут:

http://files.rsdn.ru/6532/for_rsdn.zip

Там ничего лишнего.

Моя аська 2824463

Даже совет который помог оплатится!
1 июл 09, 22:01    [7365869]     Ответить | Цитировать Сообщить модератору
 Re: Вредная оптимизация для SQL 2008. Решите за 1000 руб.  [new]
Crimean
Member

Откуда:
Сообщений: 13148
пример понятный
работать действительно должен одинаково и на 2000 и на 2005 и на 2008
собственно у меня и отработал везде :)
но - везде успешно, то есть нечто такое:

create database d1
go

use d1
go

create table t1 ( id int )
insert into t1 select 1
go

SELECT (select count(*) as c from master.dbo.sysprocesses p where dtb.database_id=p.dbid) AS [ActiveConnections] 
FROM master.sys.databases AS dtb 
WHERE (dtb.name=N'd1')
go

use master
go

SELECT (select count(*) as c from master.dbo.sysprocesses p where dtb.database_id=p.dbid) AS [ActiveConnections] 
FROM master.sys.databases AS dtb 
WHERE (dtb.name=N'd1')
go

drop database d1
go

возвращает такое:


(1 row(s) affected)

ActiveConnections 
----------------- 
                1 

(1 row(s) affected)

ActiveConnections 
----------------- 
                0 

(1 row(s) affected)

то есть после "use master" у меня не остается процессов, которые бы использовали мою новую базу данных. совет, кстати, простой - выведите эти записи :) прямо на страницу. как-то так:

select spid, dbid, login_time, hostname, program_name, cmd, loginame from master..sysprocesses where dbid = db_id('d1')

то есть в измененном "моем" примере :

create database d1
go

use d1
go

create table t1 ( id int )
insert into t1 select 1
go

SELECT (select count(*) as c from master.dbo.sysprocesses p where dtb.database_id=p.dbid) AS [ActiveConnections] 
FROM master.sys.databases AS dtb 
WHERE (dtb.name=N'd1')
go

select spid, dbid, login_time, hostname, program_name, cmd, loginame from master..sysprocesses where dbid = db_id('d1')
go

use master
go

SELECT (select count(*) as c from master.dbo.sysprocesses p where dtb.database_id=p.dbid) AS [ActiveConnections] 
FROM master.sys.databases AS dtb 
WHERE (dtb.name=N'd1')
go

drop database d1
go

я как раз себя вижу:


(1 row(s) affected)

ActiveConnections 
----------------- 
                1 

(1 row(s) affected)

spid   dbid   login_time                                             hostname                                                                                                                         program_name                                                                                                                     cmd              loginame                                                                                                                         
------ ------ ------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- ---------------- -------------------------------------------------------------------------------------------------------------------------------- 
    52      8 2009-07-01 21:06:55.227                                MyComp                                                                                                                           SQL Query Analyzer                                                                                                               SELECT           TS\Crimean                                                                                                                      

(1 row(s) affected)

ActiveConnections 
----------------- 
                0 

(1 row(s) affected)
1 июл 09, 22:17    [7365909]     Ответить | Цитировать Сообщить модератору
 Re: Вредная оптимизация для SQL 2008. Решите за 1000 руб.  [new]
mybrute
Member

Откуда:
Сообщений: 18
После всех созданий и инсертов в базе несколько секунд (бывает до 20) длится чекпоинт.
Как это побороть ?
Я стал делать после всего CHECKPOINT сам , но он завершается так же быстро.
Стал делать так:
alter database mydb SET SINGLE_USER WITH ROLLBACK IMMEDIATE
и потом детач.
Альтер проходит, а детач нет с ошибкой database is in use

Основная задача после всех дел сделать вовремя детач. Ждать 20 сек некузяво.
2 июл 09, 13:59    [7368343]     Ответить | Цитировать Сообщить модератору
 Re: Вредная оптимизация для SQL 2008. Решите за 1000 руб.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
mybrute
Основная задача после всех дел сделать вовремя детач. Ждать 20 сек некузяво.


alter database mydb SET OFFLINE WITH ROLLBACK IMMEDIATE
GO

sp_detach_db ...
GO
2 июл 09, 14:03    [7368363]     Ответить | Цитировать Сообщить модератору
 Re: Вредная оптимизация для SQL 2008. Решите за 1000 руб.  [new]
Crimean
Member

Откуда:
Сообщений: 13148
> После всех созданий и инсертов в базе несколько секунд (бывает до 20) длится чекпоинт.

оборудование / настройки. большой разницы с 2005 быть не должно

> Я стал делать после всего CHECKPOINT сам , но он завершается так же быстро.

а кто тогда сидит на базе после твоего ухода на мастер?

> Стал делать так:
> alter database mydb SET SINGLE_USER WITH ROLLBACK IMMEDIATE
> и потом детач.
> Альтер проходит, а детач нет с ошибкой database is in use



конечно! ты-то с базы уже ушел. там 1 пользователь, который мешает детачу. и то, что ты переводишь базу в однопользовательский режим "ему" не мешает. делай single_user ДО "use master" - тогда отшибешь лишних точно.
2 июл 09, 14:12    [7368412]     Ответить | Цитировать Сообщить модератору
 Re: Вредная оптимизация для SQL 2008. Решите за 1000 руб.  [new]
mybrute
Member

Откуда:
Сообщений: 18
pkarklin,

Так он действиельно отключает всех, сразу и несмотря ни на что. Однако надо бы корректнее.
Я пробовал без ROLLBACK IMMEDIATE и он ждет долго..
2 июл 09, 14:54    [7368758]     Ответить | Цитировать Сообщить модератору
 Re: Вредная оптимизация для SQL 2008. Решите за 1000 руб.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
mybrute
pkarklin,

Так он действиельно отключает всех, сразу и несмотря ни на что. Однако надо бы корректнее.
Я пробовал без ROLLBACK IMMEDIATE и он ждет долго..


Ну так ждет, пока все транзакции не доработают. Вы же сами в первом случае ROLLBACK IMMEDIATE использовали.
2 июл 09, 14:55    [7368774]     Ответить | Цитировать Сообщить модератору
 Re: Вредная оптимизация для SQL 2008. Решите за 1000 руб.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36799
mybrute
pkarklin,

Так он действиельно отключает всех, сразу и несмотря ни на что. Однако надо бы корректнее.
Я пробовал без ROLLBACK IMMEDIATE и он ждет долго..
"Надо бы корректнее" - это как?
2 июл 09, 14:55    [7368775]     Ответить | Цитировать Сообщить модератору
 Re: Вредная оптимизация для SQL 2008. Решите за 1000 руб.  [new]
mybrute
Member

Откуда:
Сообщений: 18
Сергей,

Спасибо за внимание, ну как, сказать что б он поскорее все сделал за пару сек. А не растягивал это на более чем 20 сек.

Можно отключить любые настройки только что б было как всегда.

Я уже пробоват вставлять и BEGIN / COMMIT TRAN , CHECKPOINT и все такое.

Может надо свойство у базы изменить какое то ?
2 июл 09, 15:06    [7368879]     Ответить | Цитировать Сообщить модератору
 Re: Вредная оптимизация для SQL 2008. Решите за 1000 руб.  [new]
mybrute
Member

Откуда:
Сообщений: 18
pkarklin
[quot mybrute]pkarklin,
Ну так ждет, пока все транзакции не доработают. Вы же сами в первом случае ROLLBACK IMMEDIATE использовали.


Да, но я не сообразил что все еще не вставленное откатится и дальнейшие тесты не пройдут.
2 июл 09, 15:08    [7368895]     Ответить | Цитировать Сообщить модератору
 Re: Вредная оптимизация для SQL 2008. Решите за 1000 руб.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
mybrute
Да, но я не сообразил что все еще не вставленное откатится и дальнейшие тесты не пройдут.

Откатится только незакоммиченое.
2 июл 09, 15:29    [7369110]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить