Как отследить взаимоблокировки с помощью SQL Server 2005 Profiler
- Краткое введение в тупики Взаимная блокировка возникает, когда два или более процессов SQL Server...
- Выбор событий
- Выбор столбцов данных
- Выбор организации столбцов
- Запуск трассировки
- Анализ трассировки
- Уменьшение проблем блокировки
- Резюме
Краткое введение в тупики
Взаимная блокировка возникает, когда два или более процессов SQL Server имеют блокировки для отдельных объектов базы данных, и каждый процесс пытается получить блокировку для объекта, который другие процессы ранее заблокировали. Например, процесс один имеет монопольную блокировку для объекта один, процесс два имеет монопольную блокировку для объекта два, и процесс один также хочет монопольную блокировку для объекта два, а объект два хочет монопольную блокировку для объекта один. Поскольку два процесса не могут иметь монопольную блокировку для одного и того же объекта в одно и то же время, два процесса оказываются запертыми в тупике, и ни один из процессов не желает уступать сам по себе.
Поскольку тупик не очень полезен для приложения, SQL Server достаточно умен, чтобы выявить проблему, и завершает тупик, выбирая один процесс из другого. Он делает это, убивая один из процессов (обычно процесс, который использовал наименьшее количество ресурсов сервера до этого момента) и позволяет другому продолжить работу. Прерванная транзакция откатывается и в приложении отправляется сообщение об ошибке. Если приложение знает о взаимоблокировке, оно автоматически отправит прерванную транзакцию, и пользователь, возможно, никогда не узнает, что произошла взаимоблокировка. Если приложение не знает о взаимоблокировке, то, скорее всего, на экране приложения появится сообщение об ошибке, и вы получите звонок от недовольного пользователя. Помимо раздражающих пользователей, взаимоблокировки могут излишне использовать ресурсы SQL Server, поскольку транзакции прерываются, откатываются и повторно отправляются.
Тупики были проклятием многих администраторов баз данных. Хотя это редко встречается для хорошо разработанного и написанного приложения, взаимные блокировки могут быть серьезной проблемой для - как я могу сказать это деликатно? - «менее эффективного» кода приложения. Что еще более расстраивает, так это то, что администратор базы данных не может многое сделать для предотвращения взаимоблокировок, поскольку бремя предотвращения их в первую очередь ложится на разработчиков приложений. После того, как приложение разработано и написано, администратору баз данных трудно что-либо сделать, кроме как идентифицировать код, вызывающий сбой, и сообщить о нем разработчикам, чтобы его можно было исправить.
В SQL Server 2000 и более ранних версиях наиболее распространенным способом отслеживания проблем взаимоблокировки было использование флага трассировки. В SQL Server 2005 все еще можно использовать флаги трассировки (1204 или 1222), но их не всегда легко использовать. Когда был представлен SQL Server 2005, в Profiler SQL Server 2005 были добавлены новые события (они также есть в SQL Server 2008), что позволяет очень легко идентифицировать взаимоблокировки. В этой статье мы узнаем, как использовать SQL Server 2005 Profiler для захвата и анализа взаимоблокировок.
Краткий Профилировщик Учебник для начинающих
Если вы еще не очень хорошо разбираетесь в использовании SQL Server Profiler, я хочу сделать краткий обзор того, как Profiler работает. Если вы опытный пользователь Profiler, вы можете пропустить этот раздел и перейти прямо к следующему разделу.
SQL Server Profiler - это графический интерфейс пользователя для функции в SQL Server, называемой SQL Trace. По сути, SQL Trace имеет возможность внутренней активности SQL Server, что позволяет вам видеть, что происходит внутри вашего SQL Server, включая взаимоблокировки. В этой статье мы будем использовать графический интерфейс SQL Server Profiler, хотя вы можете использовать код Transact-SQL, чтобы выполнить то же самое, используя SQL Trace.
Для захвата трассировки SQL Server с использованием SQL Server Profiler вам необходимо создать трассировку, которая включает в себя несколько основных шагов:
1) Сначала вам нужно выбрать события, которые вы хотите собрать. События - это возникновение некоторой активности внутри SQL Server, которую может отслеживать Profiler, например тупик или выполнение оператора Transact-SQL.
2) После того, как вы выбрали события, которые хотите захватить, следующим шагом будет выбор столбцов данных, которые вы хотите вернуть. Каждое событие имеет несколько столбцов данных, которые могут возвращать данные о событии. Чтобы свести к минимуму влияние запуска Profiler на рабочий сервер, всегда полезно минимизировать количество возвращаемых столбцов данных.
3) Поскольку на большинстве серверов SQL Server много разных пользователей, на которых запущено много разных приложений, работающих с разными базами данных на одном и том же экземпляре SQL Server, к трассировке можно добавить фильтры, чтобы уменьшить объем возвращаемых данных трассировки. Например, если вы заинтересованы только в нахождении взаимоблокировок в одной конкретной базе данных, вы можете установить фильтр так, чтобы возвращались только события взаимоблокировок из этой базы данных.
4) При желании вы можете упорядочить возвращаемые столбцы данных и даже группировать или агрегировать события, чтобы упростить анализ результатов трассировки. Хотя я делаю это для многих своих следов, я обычно не беспокоюсь об этом шаге при отслеживании тупиковых событий.
5) После того, как вы создали трассировку, используя описанные выше шаги, вы готовы ее запустить. Если вы используете графический интерфейс SQL Server Profiler, результаты трассировки отображаются в графическом интерфейсе по мере их захвата. Кроме того, вы можете сохранить собранные события для последующего анализа.
Теперь, когда вы знаете основы, давайте начнем создавать трассировку, которая позволит нам собирать и анализировать тупики.
Выбор событий
Хотя для диагностики большинства проблем взаимоблокировок требуется только одно событие, я хотел бы включить в свой след дополнительные контекстные события, чтобы лучше понять, что происходит с кодом. Контекстные события - это события, которые помогают представить другие события в перспективе. События, которые я предлагаю вам собрать, включают в себя:
· График тупиковой ситуации
· Блокировка: тупик
· Блокировка: тупиковая цепь
· RPC: Завершено
· SP: StmtCompleted
· SQL: BatchCompleted
· SQL: BatchStarting
Рисунок 1 : Мне нравится включать дополнительные контекстные события, чтобы помочь мне лучше понять, что происходит с кодом.
Вот краткое объяснение каждого из этих событий.
График тупика
Из семи событий, которые я перечислил выше, единственное событие, которое вы должны иметь, - это событие Deadlock Graph. Он отображает в формате XML и графически чертеж, который точно показывает причину тупика. Мы рассмотрим, как интерпретировать этот рисунок позже в этой статье.
Замок: Тупик
Это событие вызывается всякий раз, когда возникает взаимоблокировка, и поэтому оно также вызывается каждый раз, когда вызывается событие графика блокировки, создавая избыточные данные. Я включил это здесь, потому что это немного облегчает просмотр того, что происходит, но если вы хотите, вы можете удалить это событие из своей трассы.
Lock: тупиковая цепь
Это событие вызывается один раз для каждого процесса, вовлеченного в тупик. В большинстве случаев взаимоблокировка затрагивает только два процесса одновременно, и из-за этого вы увидите, что это событие сработало дважды непосредственно перед графиком Deadlock и событиями Lock: Deadlock. В редких случаях в тупик вовлечено более двух процессов, и если это так, событие запускается для каждого процесса, участвующего в тупике.
RPC: Завершено
RPC: событие Completed возникает после выполнения хранимой процедуры в виде удаленного вызова процедуры. Он включает полезную информацию о выполнении хранимой процедуры, включая время ЦП, использованное для выполнения хранимой процедуры, общую продолжительность времени выполнения хранимой процедуры, логические операции чтения и записи, произошедшие во время ее выполнения, а также имя хранимой процедуры. Сама процедура.
SP: StmtCompleted
Хранимые процедуры состоят из одного или нескольких операторов. В SQL Server 2005 каждый оператор в хранимой процедуре отслеживается. Событие SP: StmtCompleted указывает, когда закончился оператор в хранимой процедуре. Столбцы данных события StmtCompleted предоставляют много полезной информации об операторе, включая фактический код в операторе, продолжительность выполнения оператора, количество использованного времени ЦП, количество логических операций чтения и записи, количество строк, возвращаемых оператором. заявление, среди других.
SQL: BatchStarting
Событие SQL: BatchStarting вызывается всякий раз, когда начинается новый пакет. Как только начинается пакет, происходит один или несколько отдельных операторов Transact-SQL. Событие SQL: BatchStarting - это хорошее событие, позволяющее легко увидеть, где начинается пакет, но, кроме этого, оно не особенно полезно.
SQL: BatchCompleted
Событие SQL: BatchCompleted наступает при завершении пакета. Это означает, что один или несколько операторов Transact-SQL завершены для пакета. Событие SQL: BatchCompleted более полезно, чем событие SQL: BatchStarting, поскольку оно включает полезную информацию, такую как продолжительность всего пакета, логическое число операций чтения и записи, вызванных всеми операторами внутри пакета, общее количество строк, возвращаемых партия и другая полезная информация.
Выбор столбцов данных
Вам не нужно выбирать много столбцов данных, чтобы собрать данные, необходимые для анализа взаимоблокировок, но вы можете выбрать любой, который вы считаете полезным. Как минимум, я выбираю эти столбцы данных и размещаю их в порядке, указанном ниже.
· События
· TextData
· ApplicationName
· DatabaseName
· ServerName
· SPID
· LoginName
· BinaryData
Выбор организации столбцов
Я не выполняю группировку или агрегацию при отслеживании событий Profiler, но обычно я упорядочиваю столбцы данных таким образом, который лучше всего подходит для меня.
Запуск трассировки
Одна из проблем, связанных с устранением тупиковых ситуаций, заключается в том, что их часто трудно предсказать. Из-за этого вам может потребоваться запустить трассировку тупиковой ситуации в течение значительного периода времени (например, 24 часа или более), чтобы зафиксировать взаимоблокировки при их возникновении. В идеале, вы будете выполнять трассировку только в те периоды времени, когда вы знаете, что возможны взаимоблокировки, чтобы минимизировать влияние трассировки на ваш сервер.
Если вы выполняете трассировку в течение 24 часов, многие события могут быть перехвачены, особенно на очень загруженном производственном сервере. В этом случае вам может потребоваться захватить только событие Deadlock Graph, а не другие, чтобы уменьшить нагрузку на рабочий сервер. Как я упоминал ранее, другие события, которые я перечисляю, являются контекстными событиями и не требуются для устранения большинства проблем взаимоблокировки.
Анализ трассировки
Теперь, когда мы знаем, как настроить трассировку для анализа поведения взаимоблокировки, давайте рассмотрим пример, чтобы узнать, какая информация собирается и как мы можем наилучшим образом использовать ее для выявления причины взаимоблокировки.
Рисунок 2 : Это результаты захвата тупика с использованием событий, которые я рекомендовал.
Чтобы создать тупик для демонстрационных целей, я запустил две отдельные транзакции в двух разных процессах, которые, как я знаю, создали бы тупик. Они представлены восемью событиями SQL: BatchStarting и SQL: BatchCompleted в начале описанной выше трассировки.
Когда SQL Server определяет, что произошла взаимоблокировка, первое событие, обозначающее это, - это событие «Блокировка: цепочка взаимоблокировок». В приведенной выше трассировке есть два из них, для SPID 55 и SPID 54. Затем запускается событие Deadlock Graph, и, наконец, вызывается событие Lock: Deadlock.
Как только SQL Server обнаруживает тупик, он выбирает проигравшего и победителя. Событие SQL: BatchCompleted, которое следует сразу за событием Lock: Deadlock, - это транзакция, которая отменяется и откатывается, а следующее событие SQL: BatchCompleted - это событие, которое было выбрано в качестве победителя и успешно выполнено.
Если у вас возникли проблемы с приведенным выше примером, не беспокойтесь, так как это будет иметь больше смысла, когда мы внимательно рассмотрим событие Deadlock Graph.
Когда я щелкаю событие Deadlock Graph в Profiler, в нижней части экрана Profiler появляется график взаимоблокировки, как показано ниже.
Рисунок 3 : График взаимоблокировки суммирует все действия, которые привели к возникновению тупика.
Да, я знаю, что вы пока не можете прочитать график, но я хотел, чтобы вы увидели взаимосвязь между верхней и нижней частями экрана Profiler. В этом графике есть нечто большее, чем кажется на первый взгляд.
Левый овал на графике с синим крестиком представляет транзакцию, выбранную SQL Server как жертва тупика. Если вы наведете указатель мыши на овал, появится всплывающая подсказка. Этот овал также известен как узел процесса, поскольку он представляет процесс, который выполняет определенную задачу, такую как INSERT, UPDATE или DELETE.
Правый овал на графике представляет успешную транзакцию. Если вы наведете указатель мыши на овал, появится всплывающая подсказка. Этот овал также известен как узел процесса.
Два прямоугольных прямоугольника в середине называются узлами ресурсов и представляют объект базы данных, например таблицу, строку или индекс. Они представляют собой два ресурса, за которые боролись два процесса. В этом случае оба из этих узлов ресурсов представляют индексы, на которые каждый процесс пытался установить эксклюзивную блокировку.
Стрелки, которые вы видите и указывающие на овалы и прямоугольники, называются краями. Край представляет собой связь между процессами и ресурсами. В этом случае они представляют типы блокировок, которые каждый процесс имеет на каждом узле ресурсов.
Теперь, когда у вас есть общее представление о «большой» картине, давайте углубимся в детали. Давайте начнем с рассмотрения каждого из узлов ресурсов, начиная с успешного, в правой части нашего графика тупиковых ситуаций.
Рисунок 4 : Эта транзакция была выбрана в качестве победителя
Прежде чем мы обсудим, что говорит нам этот ресурсный узел, сначала нам нужно выучить несколько новых терминов. Как видите, в Resource Node есть ряд новых терминов.
· Идентификатор процесса сервера : это SPID процесса.
· Идентификатор пакета сервера : это внутренний номер ссылки для пакета, в котором выполняется этот код.
· Идентификатор контекста выполнения : это внутренний ссылочный номер потока для вышеуказанного SPID. Значение 0 представляет основной или родительский поток.
· Приоритет тупика : по умолчанию ни одна транзакция не имеет большего или меньшего шанса стать жертвой тупика, чем другая. Однако, если вы используете команду SET DEADLOCK PRIORITY для определенного сеанса, тогда этому сеансу может быть присвоено значение Low, Normal или High; установка приоритета транзакции этого сеанса над транзакцией другого сеанса. Это позволяет администратору базы данных или разработчику контролировать, какой сеанс важнее другого, когда речь идет о взаимоблокировках. Значение 0 указывает, что этому процессу не назначен приоритет.
· Используемый журнал : это объем пространства журнала, используемого транзакцией до момента возникновения тупика. SQL Server использует эту информацию, чтобы помочь ему определить, какая транзакция использовала наибольшее количество ресурсов на данный момент, так что транзакция, которая использовала наименьшее количество ресурсов, будет уничтожена и откатана, помогая минимизировать количество ресурсов, используемых для устранения тупиковой ситуации.
· Владелец ID : это внутренний ссылочный номер для транзакции, которая происходит.
· Дескриптор транзакции : это внутренний ссылочный номер, который указывает состояние транзакции.
Как видите, предоставлено много данных, но это не так уж и полезно, если вы не обладаете глубокими знаниями о внутренней работе SQL Server. Что более полезно, так это всплывающая подсказка. В нем указан точный код Transact-SQL, который был выполнен, чтобы вызвать взаимоблокировку.
Теперь, когда у нас есть определения узла процесса, давайте более подробно рассмотрим то, что говорит нам рисунок 4. Во-первых, мы знаем, что это была выигрышная сделка, потому что через нее нет синего креста. Во-вторых, он предоставляет точный код Transact-SQL, который был запущен и вызвал тупик. Это чрезвычайно полезная информация, поскольку она позволяет нам отследить событие до конкретного проблемного кода. В-третьих, он говорит нам, что этот Узел процесса имеет эксклюзивную блокировку на верхнем Ресурсном Узле (X представляет эксклюзивную блокировку). И в-четвертых, он сообщает нам, что запросил еще одну эксклюзивную блокировку на нижнем узле ресурсов. Когда вы смотрите на этот узел процесса изолированно, это не имеет большого значения. Проблема возникает, когда эта транзакция сталкивается с другой транзакцией, как мы узнаем далее.
Рисунок 5 : Эта транзакция является жертвой тупика.
С левой стороны графика тупика (рисунок 5 выше) находится другой узел процесса. Как и победивший узел процесса, этот узел сообщает нам следующее: во-первых, это была проигрышная транзакция. Во-вторых, он предоставляет код Transact-SQL, который привел к тупику. В-третьих, он говорит нам, что он имеет эксклюзивную блокировку на нижнем узле ресурсов. В-четвертых, он сообщает нам, что запросил блокировку обновления на верхнем узле ресурсов. Скоро мы поговорим о конфликтах блокировок, но сейчас давайте посмотрим на два ресурса.
Рисунок 6 : Узлы ресурсов говорят нам, за какие ресурсы боролись транзакции.
Оба этих ресурсных узла представляют собой индексы, к которым обеим транзакциям необходим доступ для выполнения запрошенной работы. Как и узлы процесса, узлы ресурсов имеют некоторые определения, которые нам необходимо изучить.
· Идентификатор HoBt: это число относится к подмножеству страниц данных / индекса в пределах одного раздела. Они могут быть в форме кучи или B-дерева. В SQL Server 2005 идентификатор HoBt идентичен идентификатору раздела, найденному в таблице sys.partitions.
· Связанный объект: это идентификатор объекта таблицы, связанной с этим индексом.
· Имя индекса: имя индекса.
Наиболее полезная информация - это имя индекса, который может быть полезен при принятии решения о том, как наилучшим образом уменьшить или устранить рассматриваемые взаимоблокировки.
Верхний узел ресурсов представляет индекс PK_SalesTaxRate_SalesTaxRateID, а нижний узел ресурсов представляет индекс PK_SalesTerritory_TerritoryID.
Теперь, когда мы обсудили все детали этого графика тупиков, давайте соберем все части вместе.
1. SPID 54 запустил транзакцию, затем запросил и получил эксклюзивную блокировку индекса PK_SalesTaxRate_SalesTaxRateID.
2. SPID 55 запустил транзакцию, а затем запросил исключительную блокировку для индекса PK_SalesTerritory_TerritoryID.
3. SPID 55, как часть той же транзакции, затем запросил блокировку обновления для индекса PK_SalesTaxRate_SalesTaxRateID. Однако эта блокировка не была предоставлена, поскольку SPID 54 уже имел исключительную блокировку для индекса. В большинстве случаев это означает, что SPID 55 должен ждать своей очереди, прежде чем сможет получить блокировку обновления для PK_SalesTaxRate_SalesTaxRateID. В этот момент SPID 54 вызывает блокировку SPID 55.
4. Поскольку вышеупомянутая блокирующая блокировка продолжается, SPID 54 хочет завершить свою транзакцию. На шаге 1 выше он только начал транзакцию, но не завершил ее. Теперь SPID 54 хочет завершить транзакцию. Для этого он должен получить эксклюзивную блокировку PK_SalesTerritory_TerritoryID. Проблема в том, что он не может получить блокировку для этого индекса, потому что SPID 55 уже имеет эксклюзивную блокировку. Теперь у нас тупик. Ни один из SPID не может быть продолжен, поскольку каждая транзакция блокирует завершение другой транзакции. Поскольку это нехорошо, SQL Server просматривает две транзакции и решает уничтожить ту, которая до сих пор использовала наименьшее количество ресурсов. В этом случае SPID 55 использовал 220 единиц журнала, а SPID 54 использовал 1612 единиц журнала. Это указывает на то, что SPID 55 должен быть уничтожен, поскольку он использует меньше ресурсов.
5. SQL Server убивает SPID 55, и транзакция откатывается, что освобождает исключительную блокировку PK_SalesTerritory_TerritoryID, теперь позволяя SPID 54 получить исключительную блокировку и завершить транзакцию.
Возможно, вам придется прочитать этот раздел несколько раз, чтобы понять все действия, которые я только что описал. Это не особенно легко следовать. Однако, как только вы поймете, что говорит график Deadlock, вы сможете лучше определить код и / или объекты, которые способствуют проблеме взаимоблокировки, что дает возможность исправить ее. В большинстве случаев это потребует участия разработчиков. К счастью, теперь у вас есть информация, которой вы должны поделиться с разработчиками, чтобы они могли решить проблему.
Уменьшение проблем блокировки
Множество разных вещей может способствовать возникновению тупика в SQL Server. Ниже приведены некоторые рекомендации о том, как устранить или, по крайней мере, смягчить проблемы взаимоблокировки в ваших приложениях. Этот список является только отправной точкой и не должен рассматриваться как полный список параметров, которые вы должны предотвратить или уменьшить взаимоблокировку. Возможно, вы захотите поделиться этим списком с вашими разработчиками вместе с информацией, которую вы указали во время трассировки.
• Убедитесь, что дизайн базы данных правильно нормализован.
• Каждый раз обращайтесь к объектам базы данных в одном и том же порядке.
• Сделайте транзакции максимально короткими.
• Во время транзакций не разрешайте ввод данных пользователем.
• Избегайте курсоров.
• Рассмотрите возможность уменьшения эскалации блокировки, используя подсказку ROWLOCK или PAGLOCK.
• Попробуйте использовать подсказку NOLOCK для предотвращения блокировки.
• Используйте как можно более низкий уровень изоляции для пользовательских соединений.
Резюме
Как видите, Profiler может быть очень мощным инструментом, помогающим администраторам баз данных выявлять проблемы взаимоблокировки. Создание тупиковой трассировки Profiler легко создать и запустить. Поэтому, если в настоящее время у вас возникают проблемы с блокировкой в ваших базах данных, найдите время, чтобы применить то, что вы узнали из этой статьи. Чем раньше вы попробуете, тем ближе вы будете к решению проблем с блокировкой.
Отслеживание тупиков. В этой статье Брэд демонстрирует, как вы можете использовать SQL Server Profiler для определения того, как возникают проблемы взаимоблокировки, и как вы можете минимизировать вероятность их повторного появления. Ответ SQL Средство мониторинга и оповещения Red Gate уведомляет вас о возникновении такой проблемы, как взаимоблокировка, и предоставляет вам диагностические данные, необходимые для решения проблемы.
Похожие
DESlock + шифрование данныхDESlock + - это решение, позволяющее шифровать данные, диски и рабочие станции, предназначенное для малых и крупных компаний. Приложение требует минимального вмешательства пользователя, Как отключить рекламу с помощью Kaspersky Internet Security
Интернет по уши в рекламе. Они могут перегружать страницы и мешать сосредоточиться на контенте. Недавно мы объяснили, как работают эти интернет-объявления, и сегодня мы расскажем, как попрощаться с этими объявлениями с помощью Kaspersky Internet Security 2017. Включить анти-баннер Ваш первый интернет-магазин. Как начать?
Вы все еще думаете о продаже через Интернет? Выполните пять шагов ниже и откройте интернет-магазин быстрее, чем вы думаете. Невероятно динамичное развитие, которое индустрия электронной коммерции испытывает в течение нескольких лет, является недостаточной Снимите код блокировки, перепрошив устройство в NOKIA E75
Если вы забыли пароль безопасности (также известный как код блокировки) для вашего NOKIA E75, и нет другого способа выполнить полный сброс, попробуйте загрузить новую прошивку, выполнив операцию прошивки на своем мобильном телефоне. Таким образом, вы восстановите пароль по умолчанию, но также потеряете все данные на вашем устройстве и вернете все настройки к заводскому состоянию. В следующем уроке мы шаг за шагом представим, как выполнить такую операцию. Пожалуйста, помните о последствиях Как обновить DirectX
... Server 2012 R2. DirectX 11.1 - Windows 8, Windows 7 с пакетом обновления 1 (с установленным обновлением 2670838), Windows Server 2008 R2 с пакетом обновления 1 (с установленным обновлением 2670838), Windows RT, Windows Server 2012. DirectX 11.0 - Windows 7, Windows Server 2008 R2, Windows Vista SP2 (с установленным обновлением 971644 или 971512), Windows Server 2008 SP2 (с установленным обновлением 971644 или 971512). DirectX Как отправить цифровую подарочную карту Steam на любую сумму
... выбор PayPal, кредитных карт или биткойнов. Выберите способ оплаты, заполните форму и нажмите «Продолжить». На странице обзора вы можете увидеть сумму подарочной карты ($ 13,37 в моем случае), получателя подарка и платежную информацию. Когда вы будете готовы к отправке, установите флажок ToS и нажмите «Купить». Как создать красивую видео галерею в своем блоге с TubePress
TubePress - лучший плагин для видеогалереи, который я лично нашел для Wordpress. Дэвид Рисли Обновлено 31 мая 2016 г. Это 30-й день 30-дневной серии плагинов WordPress для 30 убийц. Ну, мы достигли конца этой серии. Сегодня мы завершим это. Видео является довольно фундаментальным форматом контента в наши дни. Чтобы получить максимальную отдачу от вашего интернет-маркетинга, вам определенно следует использовать видео. Инструкции по включению или отключению режима планшета на ноутбуке в Windows 10
Когда вы открываете ноутбук 2-в-1 более чем на 225 градусов, клавиатура и сенсорная панель по умолчанию отключаются. Тем не менее, существуют настройки, которые отменяют это и могут быть случайно активированы. Примечание . Клавиши могут различаться в режимах планшета и рабочего стола следующим образом: В режиме планшета клавиатура автоматически открывается после касания сенсорного экрана для ввода текста. В режиме рабочего стола вы должны сначала коснуться значка клавиатуры Запуск GPS. Garmin Fenix в новом издании
Одной из наиболее важных функций, которые он унаследовал от своего предшественника, является возможность использования значительно упрощенной навигации. Fenix позволяет отображать карты, и хотя экран не большой, эта функция может Как использовать Apple TV в качестве второго дисплея в OS X Mavericks
Дебют OS X Mavericks принес несколько замечательных новых функций в почтенную операционную систему Apple. Одним из моих любимых является возможность использовать любой дисплей, подключенный к Apple TV, в качестве дополнительного дисплея. Включить это просто. Во-первых, убедитесь, что ваш Mac и Apple TV находятся в одной сети. Мошенничество с подарочными картами: как оно совершается и почему оно так прибыльно
Подарочные карты вызвали головную боль для розничная торговля в прошлом месяце разоблачение другого способа, которым мошенническая деятельность может привести к минимальной прибыли. Мошенничество с подарочными картами может варьироваться от физической кражи до клонирования до использования ошибок программирования на стороне продавца. Методы атаки очень похожи на те, что наблюдаются при мошенничестве
Комментарии
Как вы не позволяете вашему устройству выйти за пределы памяти?Как вы не позволяете вашему устройству выйти за пределы памяти? Вы можете связаться со своими идеями, советами и решениями в разделе комментариев ниже. Первоначально написано Эрез Цукерман 12 июля 2012 года. Узнайте больше о: Облачное хранилище , Место хранения , Хотя этот код будет отлично работать, как его можно улучшить?
Хотя этот код будет отлично работать, как его можно улучшить? Что ж, JSLint, а также лучшие практики для высокопроизводительного JavaScript помогут нам сделать небольшие, но важные улучшения. Исправить интервал Этот небольшой пример кода генерирует 11 сообщений об ошибках в JSLint, используя опцию «Хорошие части». Одна из вещей, на которые JSLint будет часто указывать, это отсутствие расстояния между вашими операторами. Итак, давайте исправим интервал. Вот как выглядит Вы когда-нибудь искали лучшую цену, например, телевизор или ноутбук, и использовали ли вы сравнение цен?
Вы когда-нибудь искали лучшую цену, например, телевизор или ноутбук, и использовали ли вы сравнение цен? Если это так, то вы фактически сравнили данные, поступающие непосредственно из двух разных потоков продуктов. Задумывались ли вы, как Интернет может дать вам продукты, которые вы видели раньше? Это также связано с использованием ремаркетинга и подачи товаров. Но не только Google использует XML. Многие виды торговых площадок и сайтов сравнения цен также делают это. Как работает общество?
Как работает общество? Откуда берется еда? Вам нужно знать, как работает ваш мир. […] Г.К. Честертон подытожил фантазию как искусство воспринимать то, что является смешным и повседневным (и, следовательно, невидимым), поднимать его и показывать нам с незнакомого направления, чтобы мы могли видеть его заново, свежими глазами… жанр предлагает все палитры других жанров, а также новые цвета. Их следует использовать с осторожностью. Требуется лишь настройка, чтобы сделать весь мир Вы также замечаете какие-либо закономерности «бешеного» появления или «фоча»?
Вы также замечаете какие-либо закономерности «бешеного» появления или «фоча»? После порции сладостей? После посещения моей бабушки? После игры с этим одним другом? А для тебя? авторы: Juniorowo Team Фотографии: Pixabay, Flickr Сохранить Сохранить Сохранить Сохранить Сохранить Сохранить Сохранить Сохранить Фэги, бешенство и песчаные лица Так почему же мы опустили его с первой строчки нашего списка, на позицию, которую он занимал последние два года?
Так почему же мы опустили его с первой строчки нашего списка, на позицию, которую он занимал последние два года? Это постоянное издевательство. Существует определенный уровень всплывающих окон и рекламных объявлений, приемлемых для бесплатного продукта, и Avira начала пересекать черту. Это не так обременительно, как некоторые, - вспоминается чрезмерно восторженный интерфейс Comodo, - но загрузка вашего компьютера, чтобы увидеть, как Avira снова кричит на вас, вызывает неприятные ощущения. Абра акции - как использовать?
Абра акции - как использовать? Если вы выбрали один из указанных выше кодов скидок и не знаете, как его использовать, воспользуйтесь нашим советом. Скопируйте сгенерированный для вас код скидки и перейдите в предварительный просмотр виртуальной корзины в файле abra-meble.pl. Найдите место для ввода кода скидки , вставьте его и подтвердите ваш заказ. Система автоматически добавит скидку к вашему заказу. После того как вы обновили Windows, ваш компьютер больше не распознает библиотеки DirectX?
После того как вы обновили Windows, ваш компьютер больше не распознает библиотеки DirectX? Не отчаивайтесь, я здесь, чтобы помочь вам сегодня. Библиотеки DirectX, которые включены во все версии Windows, позволяют в полной мере использовать аппаратное ускорение видеокарт: они оптимизируют выполнение 3D-игр, видео высокой четкости и другого «тяжелого» мультимедийного контента и обновляют их - по мере необходимости. Легко понять - это позволяет вам поддерживать мультимедийную производительность Итак, как вы найдете свой потерянный телефон?
Итак, как вы найдете свой потерянный телефон? Очевидная вещь, которую нужно сделать, это попытаться назвать это. Но что, если звонок находится в беззвучном режиме или телефон находится вне пределов слышимости? Если вызов не дает никаких результатов, и вы используете проприетарную телефонную платформу, вам, возможно, придется перейти непосредственно к опции блокировки, если эта опция открыта для вас. Мой текущий сотовый телефон - Nokia N900, который недавно был рассмотрен в Linux Как это работает на практике?
Как это работает на практике? Что отличает Pixel на фоне Nexuses и других смартфонов? Первая отличительная черта - и в то же время, с нашей точки зрения, большой недостаток Как мы можем улучшить это?
Как мы можем улучшить это? Дайте нам знать Мы всегда совершенствуем наши инструменты, основываясь на отзывах клиентов. Удаление CS-Cart 4 Перейдите в Панель администратора> Надстройки> Управление надстройками. Перейдите в Magic Slideshow> нажмите значок «Настройки»> выберите «Удалить»> нажмите «ОК». Волшебное Слайд-шоу теперь удалено. Удаление CS-Cart 2 &
Хотя это редко встречается для хорошо разработанного и написанного приложения, взаимные блокировки могут быть серьезной проблемой для - как я могу сказать это деликатно?
Как начать?
Вы все еще думаете о продаже через Интернет?
Как вы не позволяете вашему устройству выйти за пределы памяти?
Хотя этот код будет отлично работать, как его можно улучшить?
Вы когда-нибудь искали лучшую цену, например, телевизор или ноутбук, и использовали ли вы сравнение цен?
Задумывались ли вы, как Интернет может дать вам продукты, которые вы видели раньше?
Как работает общество?
Как работает общество?
Откуда берется еда?