SQL Server простой оператор Insert испытывает таймаут

Vec<Animal> не является законным, но компилятор не может вам сказать, потому что несоответствие типа каким-то образом скрывает его. Если мы удалим вызовы на push, компилятор даст нам следующую ошибку:

<anon>:22:9: 22:40 error: instantiating a type parameter with an incompatible type `Animal`, which does not fulfill `Sized` [E0144]
<anon>:22     let mut v: Vec<Animal> = Vec::new();
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Причина, по которой это не является законным, заключается в том, что Vec<T> хранит много T объектов последовательно в памяти. Тем не менее, Animal является признаком, а черты не имеют размера (а Cat и Dog не имеют одинакового размера).

Чтобы решить эту проблему, нам нужно сохранить то, что имеет размер в Vec. Наиболее простым решением является обертывание значений в Box, то есть Vec<Box<Animal>>. Box<T> имеет фиксированный размер («указатель жира», если T - это признак, простой указатель в противном случае).

Вот работа main:

fn main () {
    let dog: Dog = Dog;
    let cat: Cat = Cat;
    let mut v: Vec<Box<Animal>> = Vec::new();
    v.push(Box::new(cat));
    v.push(Box::new(dog));
    for animal in v.iter() {
        println!("{}", animal.make_sound());
    }
}
20
задан Ishmaeel 15 January 2009 в 17:32
поделиться

5 ответов

Наш QA имел некоторые соединения Excel, которые возвратили большие наборы результатов, те запросы приостанавливались с WaitType ASYNC_NETWORK_IO в течение некоторого времени. В это время все другие запросы испытали таймаут, так, чтобы определенная вставка не имела никакого отношения к нему.

3
ответ дан 29 November 2019 в 22:42
поделиться

Я думаю, что Ваш наиболее вероятный преступник является блокирующейся блокировкой от другой транзакции (или возможно от триггера или чего-то еще негласно).

самый легкий способ сказать состоит в том, чтобы начаться эти INSERT, и в то время как он подвешивается, работайте EXEC SP_WHO2 в другом окне на том же сервере. Это перечислит все текущее действие базы данных и имеет столбец, названный BLK, который покажет Вам, если какие-либо процессы будут в настоящее время блокироваться. Проверьте SPID из Вашего подвешенного соединения, чтобы видеть, имеет ли оно что-нибудь в BLK столбец, и если оно делает, это - процесс, это блокирует Вас.

, Даже если Вы не думаете, существует любое другое выполнение операторов, единственный способ знать наверняка состоит в том, чтобы перечислить текущие транзакции с помощью SP как этот.

34
ответ дан 29 November 2019 в 22:42
поделиться

Мог быть то, что таблица занимает много времени для роста.

, Если у Вас есть настольный приемник, чтобы вырасти большой суммой и не включить мгновенную инициализацию файла, затем запрос мог, конечно, тайм-аут время от времени.

Проверяют эту путаницу: MSDN

5
ответ дан 29 November 2019 в 22:42
поделиться

никакие другие операторы, работающие на той таблице в то время.

Что относительно операторов, работающих против других таблиц как часть транзакции? Это могло уехать, соединяет проблемную таблицу.

Также проверка на рост файла журнала или файла данных, происходящий в то время при выполнении SQL2005, он показал бы в журналах ошибки SQL.

4
ответ дан 29 November 2019 в 22:42
поделиться

взгляд на фрагментацию таблицы, Вы могли получать расщепления страницы из-за этого

0
ответ дан 29 November 2019 в 22:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: