Поиск ожидающих запросов
Начиная с SQL Server 2017 (14.x); и База данных SQL Azure, в хранилище запросов доступна статистика ожидания каждого запроса.
Типы ожидания в хранилище запросов объединены в категории ожидания. Сопоставление категорий ожидания с типами ожидания доступно в .
Выберите Статистика ожидания запросов, чтобы открыть панель Статистика ожидания запросов в SQL Server Management Studio v18 или более поздней версии. Панель статистики ожидания запросов показывает диаграмму с главными категориями ожидания в хранилище запросов. Воспользуйтесь раскрывающимся меню в верхней части, чтобы выбрать критерий для времени ожидания: среднее, максимальное, минимальное, стандартное отклонение и общее (по умолчанию).
Выберите категорию ожидания, нажав на диаграмму, и откроется подробное представление для выбранной категории ожидания. На новой диаграмме будут отображаться запросы, входящие в эту категорию ожидания.
Воспользуйтесь раскрывающимся меню в верхней части для фильтрации запросов по различным критериям времени ожидания для выбранной категории: среднее, максимальное, минимальное, стандартное отклонение и общее (по умолчанию). Выберите план для просмотра графического плана запросов. С помощью кнопок можно просмотреть исходный запрос, принудительно применить и отменить план запросов, а также обновить отображаемые на экране сведения.
Категории ожидания объединяют разные типы ожидания в контейнеры схожего характера. В разных категориях ожидания требуются разные виды последующего анализа для устранения проблемы, но типы ожидания из одной категории имеют очень схожие процедуры устранения неполадок. Определение затронутого запроса с наибольшим уровнем ожидания позволит успешно завершать подобные расследования.
Ниже приведено несколько примеров того, как можно получить дополнительные аналитические сведения о рабочей нагрузке до и после введения категорий ожидания в хранилище запросов.
Предыдущая процедура
Новая процедура
Действие
Высокий уровень ожиданий RESOURCE_SEMAPHORE на базу данных
Высокий уровень ожиданий памяти в хранилище запросов для конкретных запросов
Найдите в хранилище запросов те запросы, которые используют больше всего памяти. Вероятнее всего, эти запросы препятствуют дальнейшей обработке затронутых запросов. Рекомендуется использовать указание запроса MAX_GRANT_PERCENT для этих запросов или затронутых запросов.
Высокий уровень ожиданий LCK_M_X на базу данных
Высокий уровень ожиданий блокировки в хранилище запросов для конкретных запросов
Проверьте текст затронутых запросов и выявите целевые сущности. Найдите в хранилище запросов другие запросы, изменяющие ту же сущность, которые часто выполняются и (или) имеют большую длительность. Найдя такие запросы, рекомендуется изменить логику приложения, чтобы улучшить параллелизм, или использовать менее строгий уровень изоляции.
Высокий уровень ожиданий PAGEIOLATCH_SH на базу данных
Высокий уровень ожиданий ввода-вывода буфера в хранилище запросов для конкретных запросов
Найдите в хранилище запросов запросы с большим числом физических операций чтения. Если они соответствуют запросам с высоким уровнем ожиданий ввода-вывода, рекомендуется ввести индекс для базовой сущности, чтобы выполнять поиск вместо сканирования и этим минимизировать временные затраты ввода-вывода для запросов.
Высокий уровень ожиданий SOS_SCHEDULER_YIELD на базу данных
Высокий уровень ожиданий ЦП в хранилище запросов для конкретных запросов
Найдите в хранилище запросов те запросы, которые используют больше всего ресурсов ЦП. Выявите те из них, у которых высокое использование ЦП коррелирует с высоким уровнем ожидания ЦП для затронутых запросов
Уделите внимание оптимизации запросов — может иметь место регрессия плана или отсутствующий индекс.
Сложные SQL Queries
Кроме стандартных, часто используются сложные SQL запросы, которые представляют собой комбинацию простых. При выполнении простых запросов промежуточные результаты группируются в соответствующие таблицы данных. Сложный SQL запрос в свою очередь уже манипулирует промежуточными результатами, которые были получены с помощью простых.
Сложные SQL запросы формируются различными способами:
- Один запрос (подзапрос) помещается в иной (внешний), который является основным.
- Реляционные операторы получаются путем использования разных операторов объединения промежуточных результатов, полученных в результате выполнения простых подзапросов.
Что такое подзапросы в SQL?
- SQL подзапрос — это запрос, вложенный в другой запрос;
- Подзапрос может использоваться:
o В инструкции SELECT; o В инструкции FROM; o В условии WHERE.
- Подзапрос может быть вложен в инструкции SELECT, INSERT, UPDATE или DELETE, а также в другой подзапрос;
- Подзапрос обычно добавляется в условие WHERE оператора SQL SELECT;
- Можно использовать операторы сравнения, такие как >, <, или =. IN, ANY или ALL;
- Подзапрос также называется внутренним запросом. Оператор, содержащий подзапрос, также называется внешним;
- Внутренний запрос выполняется перед родительским запросом, чтобы результаты его работы могли быть переданы внешнему.
Подзапрос можно использовать в инструкциях SELECT, INSERT, DELETE или UPDATE для выполнения следующих задач:
- Сравнения выражения с результатом запроса;
- Определения того, включено ли выражение в результаты запроса;
- Проверки того, выбирает ли запрос любые строки.
Синтаксис:
- Подзапрос SQL (внутренний запрос) выполняется перед выполнением основного запроса (внешнего запроса);
- Основной запрос использует результат выполнения подзапроса.
Комментарии
Каждая база данных имеет счетчик, который увеличивается при каждой операции вставки или обновления в таблице, содержащей столбец типа rowversion в базе данных. Этот счетчик типа rowversion используется для работы с базами данных. Происходит отслеживание относительного времени базы данных, а не действительного времени, которое может быть связано с часами. В таблице может быть только один столбец типа rowversion. Каждый раз при изменении или вставке строки, содержащей столбец типа rowversion, увеличенное значение rowversion вставляется в столбец типа rowversion. Из-за этого свойства столбец типа rowversion нежелательно использовать в качестве ключа, особенно первичного. Любое обновление, сделанное в строке, изменяет значение rowversion и значение ключа. Если столбец является первичным ключом, старое значение ключа больше недействительно и внешние ключи, ссылающиеся на старое значение, становятся недействительными. Если на таблицу ссылается динамический курсор, все обновления изменяют положение строк в курсоре. Если столбец является ключом индекса, все обновления в строках данных также приводят к обновлению индекса. Значение rowversion увеличивается при каждом выполнении инструкции обновления, даже если значения в строке не изменяются. (Например, если значение в столбце равно 5 и инструкция обновления задает значение 5, это действие считается обновлением, несмотря на отсутствие изменений и значение rowversion увеличивается.)
Тип данных timestamp является синонимом типа данных rowversion и подчиняется правилам поведения синонимов типов данных. В инструкциях на языке описания данных DDL по возможности используйте rowversion вместо timestamp. Дополнительные сведения см. в статье Синонимы типов данных (Transact-SQL).
Тип данных Transact-SQL timestamp отличается от типа данных timestamp, определенного в стандарте ISO.
Примечание
Синтаксис timestamp является нерекомендуемым. В будущей версии Microsoft SQL Server этот компонент будет удален. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.
В инструкции CREATE TABLE или ALTER TABLE необязательно указывать имя столбца с типом данных timestamp. Рассмотрим пример.
Если имя столбца не указать, Компонент SQL Server Database Engine формирует имя столбца типа timestamp. Синоним rowversion не подчиняется этому правилу. При использовании типа данных rowversion указание имени столбца обязательно.
Примечание
При использовании инструкции SELECT INTO, в которой столбец типа rowversion находится в списке SELECT, могут быть сформированы повторяющиеся значения rowversion. Использовать тип данных rowversion таким образом не рекомендуется.
Столбец типа rowversion, который не может принимать значение NULL, семантически эквивалентен столбцу типа binary(8). Столбец типа rowversion, который может принимать значение NULL, семантически эквивалентен столбцу типа varbinary(8).
С помощью столбца rowversion можно легко определить, выполнялась ли инструкция обновления применительно к строке с момента ее последнего считывания. При выполнении инструкции обновления применительно к строке значение rowversion изменяется. Если для строки не выполнялись инструкции обновления, значение rowversion будет таким же, как и при предыдущем считывании. Чтобы получить текущее значение rowversion для базы данных, используйте функцию @@DBTS.
Столбец rowversion можно добавить в таблицу, чтобы обеспечить целостность базы данных в случаях одновременного обновления строк несколькими пользователями. Также может возникнуть необходимость в данных о количестве строк и указании обновленных строк без отправки повторного запроса в таблицу.
Например, допустим, что была создана таблица с именем . Таблица заполняется данными при выполнении следующих инструкций Transact-SQL.
После этого можно использовать следующие инструкции Transact-SQL для управления оптимистичным параллелизмом таблицы при обновлении таблицы. Скрипт использует для представления значения rowversion на момент последнего считывания строки. Замените это значение фактическим значением rowversion. Примером фактического значения rowversion является .
В транзакцию можно также ввести эти образцы инструкций Transact-SQL. При запросе переменной в области действия транзакции можно получить обновленный столбец таблицы без отправки повторного запроса в таблицу .
Ниже приведен тот же пример с использованием синтаксиса timestamp. Замените фактическим значением timestamp.
Работа с пользователями
Вывести список пользователей
Показать список прав пользователя user
Создать нового пользователя
host — здесь имя хоста, доменное имя или ip адрес, с которого пользователь сможет подключаться к серверу, например user@localhost.
Чтобы создаваемый пользователь смог подключаться к серверу MySQL с любого IP адреса или хоста (за исключением localhost), можно использовать символ процента, вот так
Чтобы разрешрешить пользователю подключаться вообще со всех хостов, придётся создать для него две учётные записи.
Добавить указанные привилегии для таблиц БД db_name пользователю user@localhost
Чтобы изменить права пользователю, иногда удобно сначала сбросить все права
А затем установить нужные с помощью GRANT, как было показано выше.
Добавить все привилегии для таблиц БД db_name пользователю user@localhost
Удаление привилегий пользователя user@localhost для БД db_name:
Сделать из пользователя суперпользователя и дать полный доступ ко всем БД на сервере
Удалить пользователя user@localhost
Перезагрузить привилегии
Изменить пароль пользователя в консоли MySQL
или так
Установить пароль для пользователя user в консоли сервера.
Простые SQL Queries
Для создания таблицы используется CREATE TABLE, новой БД – CREATE DATABASE. Все колонки, которые необходимо добавить вместе с их типами, будут приняты в качестве параметров.
Для формирования БД на сервере используют MS SQL Server Management Studio, а также MS SQL Server. При создании таблиц добавляют команду Primary Key, которая выступает как колонка, в которой все значения уникальны. Это может быть первая колонка с указанием id номера записи (строки) в таблице.
Для выполнения различных операций в SQL предусмотрено множество встроенных функций. Среди них чаще всего используются агрегатные функции:
- MIN()/ MAX() – для возврата минимального либо максимального значения указанного столбца;
- COUNT() – для возврата числа строк;
- AVG() – для возврата среднего значения указанного столбца;
- SUM() – для возврата суммы всех полей столбца, у которых имеются числовые значения.
Ключевое слово AS, добавленное в команду, поможет столбцу присвоить псевдоним. Это сделает его название не только красивым, но и более понятным.
Полезные команды MySQL
Показать все таблицы выбранной базы данных в текущей БД.
Показать все таблицы базы данных db_name.
Показать список столбцов в таблице table_name в текущей БД
Показать список столбцов в таблице table_name из БД db_name
Вывести структуру нужной таблицы
Показать структуру таблицы, будет выведен sql-запрос на её создание через «CREATE TABLE».
Вывести значения системных переменных.
Показать список выполняющихся в настоящий момент запросов.
Общая статистика MySQL.
Статистика по всем таблицам в базе db_name.
Что бы выполнять запросы к MySQL из консоли, не всегда требуется предварительно подключаться к mysql. Параметр -e позволяет исполнить команду, вывести результат на экран, после чего отключиться от сервера MySQL. Например, можно вывести список таблиц базы данных.
Запрос к таблице и просмотр результатов
Результаты запроса выводятся под текстовым окном запроса. Чтобы запросить таблицу Customers и просмотреть вставленные строки, выполните следующие действия:
-
Вставьте следующий фрагмент кода T-SQL в окно запросов и нажмите кнопку Выполнить.
Результаты запроса отображаются под областью, где был введен текст.
Вы также можете изменить представление результатов одним из следующих способов:
- Первая кнопка отображает результаты в текстовом представлении, как показано на снимке в следующем разделе.
- Кнопка посередине отображает результаты в представлении сетки
Это задано по умолчанию.
; это параметр по умолчанию.
- Третья кнопка позволяет сохранить результаты в файл, по умолчанию имеющий расширение .RPT.
Создание представлений и хранимых процедур
Представление является хранимой инструкцией SELECT, а хранимая процедура представляет собой одну или более инструкций Transact-SQL , выполняемых в виде пакета.
Представления запрашиваются так же, как таблицы, и не принимают параметры. Хранимые процедуры сложнее, чем представления. Хранимые процедуры содержат как входные, так и выходные параметры и могут содержать инструкции, которые управляют потоком кода, например IF и WHILE. Использование хранимых процедур для всех повторяющихся действий в базе данных является хорошим стилем программирования.
В этом примере используется инструкция CREATE VIEW, чтобы создать представление, которое выбирает только два столбца в таблице Products . Затем с помощью инструкции CREATE PROCEDURE создается хранимая процедура, которая принимает цену в качестве параметра и возвращает только те продукты, цена которых меньше значения, указанного в качестве параметра.
Создание представления
Выполните следующую инструкцию, создающую представление, которое выполняет инструкцию select и возвращает названия и цены продуктов пользователю.
Тестирование представления
С представлениями обращаются так же, как с таблицами. Используйте инструкцию , чтобы получить доступ к представлению.
Создание хранимой процедуры
В следующем примере создается хранимая процедура с входным параметром типа . Эта хранимая процедура печатает инструкцию , соединенную операцией сцепления с входным параметром, тип которого преобразуется из в . Затем процедура выполняет инструкцию на представлении, передавая входной параметр в предложение . Возвращаются все продукты, цена которых меньше значения входного параметра.
Тестирование хранимой процедуры
Чтобы выполнить хранимую процедуру, введите и выполните следующую инструкцию. Эта процедура должна возвратить названия двух продуктов, введенных в таблицу на занятии 1, цена которых меньше .
Копирование числовых ячеек из 1С в Excel Промо
Решение проблемы, когда значения скопированных ячеек из табличных документов 1С в Excel воспринимаются последним как текст, т.е. без дополнительного форматирования значений невозможно применить арифметические операции. Поводом для публикации послужило понимание того, что целое предприятие с более сотней активных пользователей уже на протяжении года мучилось с такой, казалось бы на первый взгляд, тривиальной проблемой. Варианты решения, предложенные специалистами helpdesk, обслуживающими данное предприятие, а так же многочисленные обсуждения на форумах, только подтвердили убеждение в необходимости описания способа, который позволил мне качественно и быстро справиться с ситуацией.
Опыт оптимизации и контроля производительности в БД с 3000 пользователей Промо
Данная статья написана по материалам доклада, прочитанного на Конференции Инфостарта IE 2014 29-31 октября 2014 года.
Меня зовут Сергей, являюсь руководителем отдела оптимизации и производительности систем в компании «Деловые линии».
Цель этого доклада – поделиться информацией о нашем опыте работы с большой базой на платформе 1С, с чем пришлось столкнуться, как удалось обеспечить работоспособность.
Уверен, что вам будет интересно, так как подобной информацией мало кто делится, да и про само существование таких систем их владельцы стараются не рассказывать, максимум про это «краем глаза» упоминают участвовавшие в проекте вендоры.
**update от 04.03.2016 по вопросам из комментариев
Подзапросы SQL-примеры
В этом разделе мы рассмотрим, как использовать подзапросы. У нас есть следующие две таблицы: ‘student‘ и ‘marks‘ с общим полем ‘StudentID‘:
студенты
отметки
Теперь нужно составить запрос, определяющий всех студентов, которые получают лучшие отметки, чем студент со StudentID — «V002». Но мы не знаем отметок студента «V002».
Поэтому нужно составить два SQL подзапроса в Select. Один запрос возвращает отметки (хранятся в поле «Total_marks») для «V002», а второй запрос выбирает учеников, которые получают лучшие оценки, чем результат первого запроса.
Первый запрос:
SELECT * FROM `marks` WHERE studentid = 'V002';
Результат запроса:
Результатом запроса будет 80.
Используя результат этого запроса, мы написали еще один запрос, чтобы определить учеников, которые получают оценки лучше, чем 80.
Второй запрос:
SELECT a.studentid, a.name, b.total_marks FROM student a, marks b WHERE a.studentid = b.studentid AND b.total_marks >80;
Результат запроса:
Два приведенных запроса определяют студентов, которые получают лучше оценки, чем студент StudentID «V002» (Abhay).
Можно объединить эти два запроса, вложив один запрос в другой. Подзапрос — это запрос внутри круглых скобок. Рассмотрим подзапроса в SQL пример:
Код SQL:
SELECT a.studentid, a.name, b.total_marks FROM student a, marks b WHERE a.studentid = b.studentid AND b.total_marks > (SELECT total_marks FROM marks WHERE studentid = 'V002');
Результат запроса:
Графическое представление подзапроса SQL:
СУБД
Существуют различные версии языка SQL. Эти разновидности специалисты иногда называют диалектами. Они создаются отдельными организациями и сообществами. Создатели выпускают более расширенные варианты устоявшихся языковых стандартов SQL.
Различные вариации спецификаций SQL предназначены для продуктивной работы с самыми разнообразными системами управления базами данных (СУБД). Каждая из них представляет собой систему программ, заточенную на выполнение определенных задач, достижения целей и работу с программными продуктами собственной инфраструктуры.
Чаще всего специалисты применяют СУБД, которые используют собственные стандарты SQL:
- Microsoft SQL Server – система управления БД, собственником которой является Microsoft. Особенно популярна в крупных компаниях корпоративного сектора. По сути является огромным комплексом приложений, который дает возможность сохранять, изменять, анализировать данные, реализовывать их безопасность и т.д. Использует диалект T-SQL (Transact-SQL);
- Oracle Database – СУБД от Oracle. Также очень популярна, в том числе в крупных компаниях корпоративного сектора. Сопоставима с предыдущей СУБД, по отношению к которой является основным конкурентом. Полнофункциональные версии обоих собственников являются достаточно дорогостоящими;
- MySQL – также принадлежит компании Oracle, но предполагает бесплатное использование. Этот продукт достаточно популярен в онлайн-сегменте. Именно на нем работает большинство веб-проектов (все они используют эту СУБД для хранения информации);
- PostgreSQL – свободная система, которая поддерживается и развивается сообществом пользователей. Также распространяется бесплатно, достаточно функциональна и пользуется широкой популярностью.
Возможности расширений в различных диалектах SQL могут иметь как общие свойства (основные конструкции), так и определенные отличия (в используемых типах данных, командах). Это объясняется тем, что диалекты создают и используют различные организации, преследующие разные цели и задачи.
Использование операторов AND, OR и NOT (логические операторы)
Функция CONTAINSTABLE и предикат CONTAINS используют одинаковые условия поиска. Они поддерживают объединение нескольких искомых терминов (с помощью логических операторов AND, OR и NOT) для выполнения логических операций. Например, оператор AND можно использовать для поиска строк, содержащих и «латте», и «пирожное с кремом». Например, с помощью оператора AND NOT можно находить строки, которые содержат слово «бублик», но не содержат «мак».
Предикаты FREETEXT и FREETEXTTABLE, напротив, обрабатывают логические термины как слова, которые следует искать.
Сведения о сочетании предиката CONTAINS с другими предикатами, которые используют логические операторы AND, OR и NOT, см. в разделе Условие поиска (Transact-SQL).
Пример
Следующий пример использует предикат CONTAINS для поиска описаний, в которых идентификатор описания не равен 5, содержащих слова Aluminum и spindle. Условие поиска использует логический оператор AND. В следующем примере используется таблица ProductDescription базы данных AdventureWorks2012.
Создание и настройка базы данных
Нам нужна будет для примеров БД MS SQL Server 2017 и MS SQL Server Management Studio 2017.
Рассмотрим последовательность действий того, как создать SQL запрос. Воспользовавшись Management Studio, для начала создадим новый редактор скриптов. Чтобы это сделать, на стандартной панели инструментов выберем «Создать запрос». Или воспользуемся клавиатурной комбинацией Ctrl+N.
Нажимая кнопку «Создать запрос» в Management Studio, мы открываем тестовый редактор, используя который можно производить написание SQL запросов, сохранять их и запускать.
Используем для начала простые запросы SQL, благодаря которым можно создать и настроить новую БД, чтобы получить возможность в дальнейшем с ней работать.
Создадим новую БД с именем «b_library для библиотеки книг. Чтобы это делать наберем в редакторе такой SQL запрос:
CREATE DATABASE b_library;
Далее выделим введенный текст и нажмем F5 или кнопку «Выполнить». У нас создастся БД «b_library.
Все дальнейшие манипуляции мы можем провести с этой созданной нами БД. Для этого сначала подключимся к этой базе:
USE b_library;
В БД «b_library создадим таблицу авторов «tAuthors» с такими столбцами: AuthorId, AuthorFirstName, AuthorLastName, AuthorAge:
CREATE TABLE tAuthors ( AuthorId INT IDENTITY (1, 1) NOT NULL, AuthorFirstName NVARCHAR (20) NOT NULL, AuthorLastName NVARCHAR (20) NOT NULL, AuthorAge INT NOT NULL );
Заполним нашу таблицу таким авторами: Александр Пушкин, Сергей Есенин, Джек Лондон, Шота Руставели и Рабиндранат Тагор. Для этого используем такой SQL запрос:
INSERT tAuthors VALUES (‘Александр’, ‘Пушкин’, ’37’), (‘Сергей’, ‘Есенин’, ’30’), (‘Джек’, ‘Лондон’, ’40’), (‘Шота’, ‘Руставели’, ’44’), (‘Рабиндранат’, ‘Тагор’, ’80’);
Мы можем посмотреть в «tAuthors» записи, путем отправления в СУБД простого SQL запроса:
SELECT * FROM tAuthors;
В нашей БД «b_library» мы создали первую таблицу «tAuthors», заполнили «tAuthors» авторами книг и теперь можем рассмотреть различные примеры SQL запросов, которыми мы сможем взаимодействовать с БД.
Подключение к MySQL через консоль
Получить информацию об установленной версии MySQL
Для подключения к mysql в консоли наберите команду
- h — хост c MySQL. Если подключаемся с локальной машины, параметр можно опустить
- u — имя пользователя MySQL (root или другой пользователь MySQL)
- p — пароль, который будет предложено ввести после нажатия enter
Приглашение командной строки изменится, это значит, сервер MySQL ждёт от вас команд.
Запросы должны оканчиваться точкой с запятой. Длинные запросы удобно разбивать enter-ом для перехода на новую строку, а после полного написания запроса поставить точку с запятой и выполнить его.
Для отключения от MySQL нужно написать exit или (в unix-системах) нажать комбинацию клавиш ctrl+с.
Для вывода всех баз данных на сервере используйте команду show databases.
Выберите нужную базу данных командой use.
Теперь можно вводить запросы.
Чтобы подключиться к MySQL и сразу выбрать нужную базу
Создание образца базы данных
Прежде чем мы сможем начать делать запросы в SQL, мы сначала создадим базу данных и пару таблиц, а затем заполним эти таблицы некоторыми примерами данных. Это позволит вам получить практический опыт, когда вы начнете делать запросы позже.
Для примера базы данных, которую мы будем использовать в этом руководстве, представьте следующий сценарий:
Вы и несколько ваших друзей празднуете свои дни рождения друг с другом. В каждом случае члены группы направляются в местный боулинг, участвуют в дружеском турнире, а затем все направляются к вам, где вы готовите любимое блюдо для именинника.
Теперь, что эта традиция продолжается некоторое время, вы решили начать отслеживать записи с этих турниров. Кроме того, чтобы упростить планирование обедов, вы решаете создать запись о днях рождения ваших друзей и их любимых блюдах, сторонах и десертах. Вместо того чтобы хранить эту информацию в физической книге, вы решаете использовать свои навыки работы с базами данных, записав ее в базу данных MySQL.
Если вы создали сервер в NetAngels на основе образа Ubuntu 18.04 Bionic LAMP, то откройте приглашение MySQL выполнив от пользователя root команду:
mysql
Примечание: Если зайти в MySQL таким образом не удается, то для аутентификации с использованием пароля используйте команду:
mysql -u root -p
Затем создайте базу данных, запустив:
Затем выберите эту базу данных, набрав:
Затем создайте две таблицы в этой базе данных. Мы будем использовать первую таблицу, чтобы отслеживать записи ваших друзей в боулинге. Следующая команда создаст таблицу под названием «tourneys» со столбцами для «name» каждого из ваших друзей, количества турниров, которые они выиграли («wins»), их лучший результат за все время и каков размер обувь для боулинга, которую они носят ():
Как только вы запустите команду и заполните ее заголовками столбцов, вы получите следующий вывод:
Заполните таблицу ‘tourneys’ некоторыми примерами данных:
Вы получите такой вывод:
После этого создайте еще одну таблицу в той же базе данных, которую мы будем использовать для хранения информации о любимых блюдах ваших друзей на день рождения. Следующая команда создает таблицу с именем dinners и столбцами для«имя» каждого из ваших друзей, их «дата рождения», их любимое «блюдо», их любимое «гарнир» и их любимый «десерт»:
Аналогично для этой таблицы вы получите отзыв, подтверждающий успешное выполнение команды:
Заполните эту таблицу также некоторыми примерами данных:
Как только эта команда завершится успешно, вы закончили настройку базы данных. Далее мы рассмотрим основную структуру команд запросов SELECT.
Что такое SQL Profiler и зачем оно вообще нужно
SQLProfilerэто программа поставляемая вместе с MS SQL Server и предназначена она для и просмотра всех событий, которые происходят в SQL сервер или говоря другими словами для записи трассировки. Зачем SQLProfiler может понадобиться программисту 1С? Хотя бы для того, что бы получить текст запроса на языке SQL и посмотреть его план. Конечно, это можно сделать и с помощью технологического журнала, но это требует некоторых навыков, да и план в ТЖ получается не такой красивый и удобочитаемый. В профайлере можно посмотреть не только текстовый, но и графический план выполнения запроса, что на мой взгляд, гораздо удобнее. Так же с помощью профайлера можно определить: запросы длиннее определенного времени запросы к определенной таблице ожидания на блокировках таймауты взаимоблокировки и многое другое…
Выявляем и оптимизируем ресурсоемкие запросы 1С:Предприятия
Обычно предметом оптимизации являются заранее определенные ключевые операции, т.е. действия, время выполнения которых значимо для пользователей. Причиной недостаточно быстрого выполнения ключевых операций может быть неоптимальный код, неоптимальные запросы либо же проблемы параллельности. Если выясняется, что основная доля времени выполнения ключевой операции приходится на запросы, то осуществляется оптимизация этих запросов.
При высоких нагрузках на сервер СУБД в оптимизации нуждаются и те запросы, которые потребляют наибольшие ресурсы. Такие запросы не обязательно связаны с ключевыми операциями и заранее неизвестны. Но их также легко выявить и определить контекст их выполнения, чтобы оптимизировать стандартными методами.