Sql

Ex sql: sql-ex.ru | SQL-tutorial.ru

Содержание

SQL-Ex blog

Posted by Sergey Moiseenko on

Пересказ статьи Andy Galbraith. Disabling Non-Clustered Indexes For Fun and Profit


Одним из часто цитируемых практических советов в ETL является отключение некластеризованных индексов при загрузке данных. Общепринятое мнение заключается в том, что вы отключаете некластеризованные индексы, выполняете загрузку, а затем включаете некластеризованные индексы, что функционально перестраивает их с вновь загруженными данными (шаг, который должен выполняться после загрузки любого объема, даже если вы НЕ отключали ваши индексы - перестраивайте эти ставшие фрагментированными индексы!) Continue reading "Отключение некластеризованных индексов для развлечения и пользы" Categories: Optimization Posted by Sergey Moiseenko on

§ Усилена проверка задачи 111 (SELECT, обучающий этап).


Continue reading "Новости за 2021-05-29 - 2021-06-04" Categories: Site news Posted by Sergey Moiseenko on

Пересказ статьи Greg Larsen. SQL Server authentication methods, logins, and database users


Настройка и управление безопасностью SQL Server является важной частью построения и обслуживания среды вашего SQL Server. Безопасность SQL Server - это огромная тема, которая не может быть полностью раскрыта в одной статье. Данная статья начинает с нескольких фундаментальных вопросов безопасности SQL Server: методов авторизации SQL Server, логинов и пользователей базы данных.
Continue reading "Методы авторизации SQL Server, логины и пользователи базы данных" Categories: T-SQL Posted by Sergey Moiseenko on

Пересказ статьи Mike Byrd. Query Optimizer Suggests Wrong Index and Query Plan -- Why?


При подготовке презентации на конференцию я наткнулся (случайно) на неожиданный план запроса. Этот план включал предлагаемый индекс, который, к сожалению, и привел к этому очень необычному плану запроса. Данная статья не о том, "как сделать лучше", а, скорее, является началом дискуссии, почему оптимизатор сделал то, что сделал.
Continue reading "Оптимизатор запросов предлагает неправильный индекс и план запроса - почему?" Categories: Optimization Posted by Sergey Moiseenko on

§ В рейтинге авторов теперь учитываются упражнения раздела DML.
Кроме того, изменился параметр ранжирования авторов.


Continue reading "Новости за 2021-05-22 - 2021-05-28" Categories: Site news Posted by Sergey Moiseenko on

Пересказ статьи Steve Jones. Redistributing Data Across Files


Много людей, которые поневоле занимаются администрированием баз данных, могут не знать, как таблицы распределяются по файлам в файловых группах. Часто оказывается, что менее опытные люди путаются с файлами и файловыми группами, а также с тем, как SQL Server распределяет данные по файлам, и почему данные не перемещаются при добавлении файлов.

Continue reading "Перераспределение данных по файлам"

Categories: Optimization, T-SQL Posted by Sergey Moiseenko on

Пересказ статьи Brent Ozar. Your Top 10 Ideas for SQL Server


Вы отправляете тысячи отчетов о багах и пожеланий на feedback.azure.com, и вот 10 топовых запросов по результатам голосования:

Continue reading "10 ваших топовых идей для SQL Server"

Categories: T-SQL Posted by Sergey Moiseenko on

§ Голосование по упражнениям теперь доступно и для задач DML (с номерами свыше 20).
Как и для упражнений на SELECT, любую решенную задачу можно оценить по 10-бальной шкале.


Continue reading "Новости за 2021-05-15 - 2021-05-21" Categories: Site news Posted by Sergey Moiseenko on

Проблема


Нужно найти строки, содержащие заданный фрагмент текста, в любых столбцах любых таблиц базы данных.
Мне неоднократно встречался такой вопрос в профессиональных социальных сетях. Предлагаемое решение написано для SQL Server, хотя его без особого труда можно адаптировать и для других СУБД/диалектов. Continue reading "Поиск фрагмента текста по всей базе данных" Categories: T-SQL Posted by Sergey Moiseenko on

Пересказ статьи Andy Warren. Monitoring the Number of Connections


Для мониторинга в SQL Server существует множество доступных метрик - сотни! На практике мы полагаемся на небольшую часть, которая поможет нам понять текущее и долгосрочное состояние сервера. Сегодня я хочу обосновать мониторинг числа подключений как одну из этих ключевых метрик.

Continue reading "Мониторинг числа подключений"

Categories: Optimization Posted by Sergey Moiseenko on

§ Популярные темы недели на форуме

Топик		Сообщений
11 (DML) 2
61 (Learn) 2

§ Авторы недели на форуме

Автор		Сообщений
warlamov 2
Continue reading "Новости за 2021-05-08 - 2021-05-14" Categories: Site news Posted by Sergey Moiseenko on

Пересказ статьи Matthew McGiffen. What are Statistics in SQL Server?


Статистика жизненно важна для SQL Server, позволяя ему находить наиболее эффективный способ выполнять ваши запросы. Здесь мы узнаем больше о том, что представляет собой статистика, и как она используется.
Continue reading "Что такое статистика в SQL Server?" Categories: Optimization Posted by Sergey Moiseenko on

Пересказ статьи Erik Darling. When Index Sort Direction Matters


Когда-нибудь пригодится


Недавно я получил письмо с вопросом о некоторых советах, которые свободно распространяются в Интернете относительно индексации оконных функций.
Continue reading "Когда направление сортировки индекса имеет значение" Categories: Optimization Posted by Sergey Moiseenko on

§ Популярные темы недели на форуме

Топик		Сообщений
9 (Learn) 4
10 (Learn) 2
18 (Learn) 2
46 (Learn) 2
Continue reading "Новости за 2021-05-01 - 2021-05-07" Categories: Site news Posted by Sergey Moiseenko on

Пересказ статьи Forrest. Parse Time vs Compilation Time


В последнее время я возился с долгими компиляциями, и в голову закрался однин вопрос, основанный на SET STATISTICS TIME ON…


Continue reading "Время анализа против времени компиляции"

Categories: Optimization

sql-ex упражнение 39 не удалось выполнить при второй ошибке сервера?



Упражнение 39: найдите корабли, "сохранившиеся для будущих сражений"; получив повреждения в одном бою, они приняли участие в другом.

Схема базы данных: http://www.sql-ex.ru/help/select13.php#db_3

Свой подход:

SELECT distinct o.ship from Outcomes o
WHERE o.RESULT = 'damaged' 
AND exists (select 1 FROM Outcomes o2 WHERE o2.ship = o.ship 
AND (o2.result='OK' OR o2.result='sunk'))

sql-бывший говорит

Ваш запрос произвел правильный набор результатов в основной базе данных, но он не прошел тест на второй, проверяющей базе данных

правильный результат совпал с моим выводом.

Где я потерпел неудачу?

sql sql-server sql-server-2008
Поделиться Источник Registered User     22 октября 2013 в 17:27

5 ответов




2

Решено! нужно добавить различные

select distinct kk.ship from
(Select ship,date from outcomes oo,battles bb where oo. battle=bb.name) tt 
inner join 
(Select ship,date as damagedate from outcomes oo,battles bb where result='damaged' AND oo.battle=bb.name) kk 
ON tt.ship=kk.ship AND tt.date>kk.damagedate

Поделиться user6119989     29 марта 2016 в 07:19



1

with a as (select * from outcomes o join battles b on o.battle=b.name)select distinct a1.ship from a a1, a a2 where a1.ship=a2.ship and a1.result='damaged'and a1.date<a2.date

Поделиться Huzaifa     13 декабря 2013 в 06:46



0

Попробовать это:

    select o.ships from (select a.ships, a.battle from outcomes as a where result in (damaged, unharmed)) as o
    where o.battle <> a.battle

Поделиться StyleCleveland     22 октября 2013 в 18:54




0

select distinct outcomes. ship
from outcomes, (select outcomes.ship, battles.[date], outcomes.result
            from outcomes, battles
            where battles.name = outcomes.battle
            and result = 'damaged' ) t1, 
 battles
where outcomes.ship = t1.ship and
outcomes.battle = battles.name and
battles.[date] > t1.[date]

Поделиться Andris Sirons     09 июня 2015 в 12:56



0

Вот мой ответ, и страница не считает его истинным, но я с ним не согласен. Не знаю, чем мое решение отличается от любого вашего

select distinct damaged.ship from 
(Select oo.ship,date from outcomes oo
inner join battles bb on oo.battle=bb.name
) as ships
inner join (Select ship,date as damagedate from outcomes oo1
inner join battles bb1 on oo1.battle=bb1.name and result = 'damaged') as damaged
on (ships.ship = damaged.ship and ships.date != damaged.damagedate)

Поделиться 2low. samurai     06 октября 2016 в 11:44


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

5 сайтов для оттачивания навыков написания SQL-запросов

Одним из ключевых навыков при работе с базами данных является умение писать sql-запросы. Мы отобрали 5 лучших сайтов для оттачивания этого навыка.

Два сайта указаны вместе, так как представляют собой один ресурс. sql-tutorial - это интерактивный онлайн-учебник по изучению SQL, где подробно и структурировано расписана вся необходимая теория, а в конце каждой главы прилагаются уже разобранные упражнения по данной теме с описанием типичных ошибок и способов решения. sql-ex полностью ориентирован на задачи по базам данных. Также стоит отметить возможность приобретения сертификата (платно) и то, что весь материал изложен на русском языке.

Как следует из названия, этот сайт является задачником по написанию запросов, используя синтаксис Postgre DB. Упражнения делятся по тематикам. Рассматриваются такие вещи, как рекурсия, строки, использование aggregate функций и join’ов, работа с датами и подзапросами. Для желающих предоставляем ссылку на документацию.

Интерактивный туториал по изучению SQL. Рекомендуется для новичков и тех, кто желает освежить свои знания. Здесь нет типичного деления на практику и теорию, информация подаётся в формате уроков. Уроки состоят из необходимой теории с примерами, а в конце предлагается несколько задач по только что прочитанному материалу. Вводных уроков 18, разбираются такие темы, как ограничения, join'ы, выражения, агрегаты и действия с таблицами и со строками. Однако если вы уже прилично разбираетесь в написании запросов, то, возможно, вам стоит обратить внимание на более "продвинутые" источники.

Указанный ресурс отлично подойдёт для программистов любого уровня. Здесь есть простенькие задачи, разбитые по темам, теоретическая справка по каждому пункту и викторина по выбранной теме. Вся информация излагается лаконично и в доступной форме.

Сайт, который исповедует принцип соревновательного программирования. Справки нет, упражнения делятся по темам, сложности и максимальному количеству баллов за безупречное решение задачи. Ресурс всемирный, и предоставляет возможность также посоревноваться в решении задач на C++, Python, Java и PHP. Рекомендуется тем, кто уже неплохо разбирается в базах данных.

NoSQL базы данных: работаем с данными правильно

NoSQL базы данных: хранилища и доступность данных

Решение задач с сайта sql-ex.ru 1-10

Задание: 1

Найдите номер модели, скорость и размер жесткого диска для всех ПК стоимостью менее 500 дол. Вывести: model, speed и hd

001

Select model ,  speed, hd  From pc  Where price < 500

Задание: 2

Найдите производителей принтеров. Вывести: maker

001

Select maker  from  product where product.type = 'printer' group by maker

Задание: 3

Найдите номер модели, объем памяти и размеры экранов ПК-блокнотов, цена которых превышает 1000 дол.

001

select model , ram ,  screen from laptop where price < 1000

Задание: 4

Найдите все записи таблицы Printer для цветных принтеров.

001

select from printer where color = 'y'

Задание: 5

Найдите номер модели, скорость и размер жесткого диска ПК, имеющих 12x или 24x CD и цену менее 600 дол.

001

Select model ,speed , hd  from pc where (cd = '12x' or cd = '24x') and price < 600

Задание: 6

Укажите производителя и скорость для тех ПК-блокнотов, которые имеют жесткий диск объемом не менее 10 Гбайт.

001

002

Select maker, speed  from Product inner join Laptop on Product.model = Laptop.model

where hd <<span style="font-size: 0.857142857rem; line-height: 1.714285714;">= 10

Задание: 7

Найдите номера моделей и цены всех продуктов (любого типа), выпущенных производителем B (латинская буква).

001

002

003

004

005

006

007

008

Select laptop.model , laptop.price  from laptop inner join product on laptop.model = product.model

where product.maker= 'B'

union

Select pc.model , pc.price from pc inner join product on pc.model = product.model

where product.maker= 'B'

union

Select printer.model , printer.price from printer inner join product on printer. model = product.model

where product.maker= 'B'

Задание: 8

Найдите производителя, выпускающего ПК, но не ПК-блокноты.

001

002

select maker from product where type='PC' and maker not in

select maker from product where type = 'Laptop'group by maker

Задание: 9

Найдите производителей ПК с процессором не менее 450 Мгц. Вывести: Maker

001

002

Select maker  from pc inner join product on pc. model = product.model where speed <= 450

group by maker

Задание: 10

Найдите принтеры, имеющие самую высокую цену. Вывести: model, price

001

select model, price  from printer where price = (select max(price) from printer)

7 cайтов для оттачивания навыка написания SQL запросов на 2020 год

Работа с SQL – базовый навык для любого человека, связанного с информационными технологиями. Сайт proglib.io опубликовал подборку 7 лучших ресурсов для оттачивания работы c SQL запросами, чтобы прокачать его.

Русскоязычные ресурсы

1) 
sql-academy

Сервис, в основном направленный на SQL тренажер, который является одним из лучших на рынке: есть работа с несколькими вкладками, подсветка синтаксиса и система автодополнения. Помимо тренажера в сервисе есть система рейтинга пользователей и учебник.

2) 
learn-db

Learn DB – сервис, направленный на интерактивные онлайн курсы по SQL. Благодаря курсам вы сможите пошагово изучить или вспомнить теоритические знания и сразу же прорешать задания на их основе.

3) 
sql-ex и sql-tutorial

Два сайта, представляющие собой один ресурс. Sql-tutorial – интерактивный учебник с теоритической основой и разбором задач. Sql-ex – онлайн тренажер с длинной историей и большой базой заданий.

Англоязычные ресурсы

1) 
hackerrank

HackerRank — это социальная платформа, которая предлагает задания разной сложности по программированию. Запущена платформа была в 2012 году. Сейчас аудитория проекта насчитывает около полутора миллиона пользователей. В рамках платформы есть секция для тренировки навыков по SQL. Есть поддержка 4 СУБД, сохранения предыдущих ответов и система рейтинга.

2) 
pgexercises

Сервис, направленный для оттачивания навыков работы с SQL в СУБД PostgreSQL. В рамках одной БД сервис пошагово знакомит пользователей с основами работы SQL. Упражнения делятся на темы.

3) 
sqlbolt

Интерактивный курс, в рамках которого в конце каждого теоретического материала приводится тренажер для отработки знаний, полученных выше.

4) 
sqlzoo

На ресурсе упражнения разбиты по разделам, в рамках которых идет освоение соответствующих тем и оттачивание их на конкретной базе данных. Все задания имеют разбор.

Упражнения по SQL: DML

Добавить в таблицу PC следующую модель: 
code: 20 
model: 2111 
speed: 950 
ram: 512 
hd: 60 
cd: 52x 
price: 1100 
INSERT INTO pc (code, model, speed, ram, hd,cd,price)
VALUES(20,2111,950,512,60, '52x', 1100)
Добавить в таблицу Product следующие продукты производителя Z: 
принтер модели 4003, ПК модели 4001 и блокнот модели 4002

 INSERT INTO product (maker, type, model) VALUES
('Z', 'Printer', 4003), ('Z', 'PC', 4001), ('Z', 'Laptop', 4002)
Добавить в таблицу PC модель 4444 с кодом 22, имеющую скорость процессора 1200 и цену 1350.  

Отсутствующие характеристики должны быть восполнены значениями по умолчанию, принятыми для соответствующих столбцов. 

INSERT INTO pc (model, code, speed, price) VALUES
(4444,22,1200,1350)
Для каждой группы блокнотов с одинаковым номером модели добавить запись в таблицу PC со следующими характеристиками: 
код: минимальный код блокнота в группе +20; 
модель: номер модели блокнота +1000; 
скорость: максимальная скорость блокнота в группе; 
ram: максимальный объем ram блокнота в группе *2; 
hd: максимальный объем hd блокнота в группе *2; 
cd: значение по умолчанию; 
цена: максимальная цена блокнота в группе, уменьшенная в 1,5 раза. 
Замечание. Считать номер модели числом. 
insert into pc ( code, model, speed, ram, hd, price )
select min ( code ) + 20,
            model + 1000,
            max ( speed ),
            max ( ram ) * 2,
            max ( hd ) * 2,
            max ( price ) / 1. 5
     from laptop group by model
Удалить из таблицы PC компьютеры, имеющие минимальный объем диска или памяти. 
DELETE FROM PC WHERE
pc.ram=(select MIN(ram) from pc) or
pc.hd=(select MIN(hd) from pc)
Удалить все блокноты, выпускаемые производителями, которые не выпускают принтеры.

Delete from Laptop where model not in (select model from Product where maker in (select maker from product where type ='Printer'))
Производство принтеров производитель A передал производителю Z. Выполнить соответствующее изменение. 
UPDATE Product SET maker = 'Z' WHERE type = 'Printer' and maker = 'A'
Удалите из таблицы Ships все корабли, потопленные в сражениях. 
DELETE FROM Ships WHERE name In (SELECT ship FROM Outcomes WHERE result='sunk')
Измените данные в таблице Classes так, чтобы калибры орудий измерялись в 
сантиметрах (1 дюйм=2,5см), а водоизмещение в метрических тоннах (1 
метрическая тонна = 1,1 тонны). Водоизмещение вычислить с точностью до 
целых.

update Classes set bore=bore*2.5, displacement= round(displacement/1.1,0)
Добавить в таблицу PC те модели ПК из Product, которые отсутствуют в таблице PC. 

При этом модели должны иметь следующие характеристики: 

1. Код равен номеру модели плюс максимальный код, который был до вставки. 

2. Скорость, объем памяти и диска, а также скорость CD должны иметь максимальные характеристики среди всех имеющихся в таблице PC. 

3. Цена должна быть средней среди всех ПК, имевшихся в таблице PC до вставки. 

INSERT INTO pc (code, model, speed, ram, hd, cd, price)
SELECT
(SELECT MAX(code) FROM PC) + model AS code,
model,
(SELECT MAX(speed) FROM PC) AS speed,
(SELECT MAX(ram) FROM PC) AS ram,
(SELECT MAX(hd) FROM PC) AS hd,
CAST((SELECT MAX(CAST (SUBSTRING(cd,1,LEN(cd) - 1) AS int)) FROM PC) AS VARCHAR) + 'x' AS cd,
(SELECT AVG(price) FROM PC) AS price
FROM product
WHERE type = 'PC'
AND model not IN (SELECT model FROM pc)

Мой нестандартный путеводитель по SQL-галактике | by Alla Khrystych

Последние несколько лет ИТ-эксперты, журналисты и блогеры единодушно отмечают, что язык програмирования SQL вновь восстребован.

source: https://insights.stackoverflow.com/survey/2018/#top-paying-technologies

Трудно однозначно ответить, связано ли это с растущей экосистемой разработчиков PostgreSQL и MySQL, экспериментами Microsoft, SAP, Oracle, публикацией стандарта SQL:2016. или еще с чем-то. А может, все это просто потому, что «лучше никто ничего до сих пор не придумал»?

Какой бы ни была причина, меня этот «крен» в сторону SQL откровенно радует. Умение писать SQL-запросы стало попадаться даже в требованиях к нетехническим специалистам, не говоря уже о «чистых айтишниках». Получается, что все, что нам рассказывали о реляционных базах данных и SQL в рамках программы MBA, было не напрасно. При этом Access 2016 сегодня воспринимается куда приятнее, более ранние версии Access чем в 2006м, когда мы учились. И желание «копнуть поглубже» более основательные СУБД типа PostgreSQL тоже крепнет, пусть даже мой ноут то и дело напоминает о том, что жесткий диск у него нерезиновый, и что тренироваться писать SQL-запросы лучше бы где-нибудь в облаке.

Если тренд не изменится, то еще немного, и вместо обычных cover letters я начну сочинять письма рекрутерам в форме SQL-запросов;). Но пока до этого не дошло, хочу собрать в одном месте свои любимые ресурсы по SQL.

Сразу предупреждаю: как типичный прагматик, я ценю образование в течение всей жизни, но в ценность оффлайн курсов типа «за 32 учебных часа мы научим вас работе со всеми реляционными базами данных» не верю. То есть, мне, конечно, понятна их ценность для организаторов)). Но ценности для тех, кто хотел бы благодаря таким курсам хорошенько изучить SQL, чтоб повысить свою профессиональную восстребованность я точно не вижу.

Почему? Да потому что если кроме таких курсов больше негде практиковаться, то никто всерьез вас воспринимать не станет. И никакие дорогостоящие сертификаты не помогут, если не получится сделать тестовое задание, да еще и отловить там «подводные камни» (да-да, и такое встречается).

Поэтому начну с вопроса ГДЕ практиковаться, и уж потом перейду к тому, ЧТО помогает в таком практическом обучении. Ссылаться буду в основном на англоязычные ресурсы. Русскоязычные тоже будут, но значительно реже. Так сложилось, что техническую литературу я гораздо чаще читаю на английском. Во-первых, на заре своей творческой деятельности активно подрабатывала техническим переводчиком. Во-вторых, не все в наших широтах выходит вовремя, оттого хочешь-не хочешь, приходится рыться в сети на англоязычных сайтах. Плюс локализованные версии софта западных разработчиков мне всегда казались чем-то изначально надуманным и неестественным. (Между прочим, можно прекрасно обходиться без зазубривания локальных аналогов Excel функций и команд).

Итак, в путь.

***

Запросы, в принципе, можно и в обычном текстовом файле писать. Но нас же интересует не только процесс, верно? Поэтому давайте разберемся с матчастью — стандартом ANSI SQL и процедурными расширениями SQL тех или иных СУБД (иногда их еще называют SQL диалектами, хотя это не совсем корректно). Примеры платных и бесплатных процедурных расширений для SQL-СУБД и особенности их синтаксиса можно посмотреть вот здесь.

Страница специально создана для тех, кто портирует SQL базы из одной СУБД в другую и/ или интересуется возможностями и ограничениями т. н. «кросс-продуктового» SQL. (Правда, проект хоть и заявлен как work in progress, но с декабря 2014 не обновлялся).

Идем дальше. Перед скачиванием конкретной СУБД не мешает свериться с требованиями к ее установке. Операционная система в большинстве случаев не критична. Что немного может расстроить, так это разрядность компа. К примеру, такие вендоры- «тяжеловесы» как Microsoft готовы разрешить поиграться бесплатно или условно-бесплатно (от 30 до 180 дней) с их последними SQL решениями, но лишь на 64-bit машине. Последняя версия Microsoft SQL Server Express, которую можно развернуть на 32-bit машине, это — Microsoft SQL Server Express 2014. То есть, выпущена она года 4 с лишним года назад Так что теоритически возможны проблемы с апдейтами /антивирусной поддержкой. Плюс в следущих релизах в 2016 г. и 2017 г. Microsoft добавила поддержку языков R и Python, и если вы хоть немного знакомы с этими языками, будет обидно остаться без возможности их использования.

Обращаю внимание на слово ”Express” в названии. И у Microsoft, и у Oracle так обозначаются бесплатные версии SQL решений с урезанной функциональностью. Но если цель — запросы и аналитика, а не администрирование баз данных, то можно и не особо переживать. Как вариант — скачать полноценную версию на 180 дней, «набить руку» в работе с ней и потом уж решать, стоит ли на нее тратиться. Или устроиться к работодателю, который жизни своей не мыслит без MS SQL Server).

Впрочем, если 64-bit компьютер отсутствует, не беда. Во-первых, упражняться в написании SQL-запросов можно в MS Access, где имеется опция SQL view. Если же не проинсталлирован MS Office, на помощь придет его аналог с открытым кодом LibreOffice, в частности — LibreOffice Base. У этой проги, как и у Access, тоже имеется SQL view (подробности вот в этом видео-курсе).

Кроме того корпорация Microsoft недавно выкатила в бета-версии такую симпатичную бесплатную штуку, как SQL Operations Studio. На всякий случай, сразу предупреждаю, этот софт можно развернуть тоже только на 64-bit компьютере. Зато работает под Windows, macOS и Linux, а также на SQL Server, Azure SQL Database и Azure SQL Data Warehouse.

Ну, и помним о существовании СУБД с открытым программным кодом: SQLite, MySQL и PostgreSQL. Все они не настолько требовательны, и без проблем запускаются на 32-bit машине.

Да, чуть не забыла. Для работы с SQLite можно также использовать SQLite Studio. Занимает эта утилита всего 16 с небольшим мегабайт, зато какой простор для экспериментов с кодом;-).

**
Кроме десктопных версий упражняться можно и в облаке, чему некоторые крупные вендоры будут только рады. Так IBM предоставляет сейчас возможность бесплатно поиграться с их СУБД DB2 и не только в IBM Cloud. Что приятно, ибо не требует ввода никаких данных банковских карт.

image credit: https://cognitiveclass.ai

Корпорация Microsoft тоже всячески зазывает потестировать свою облачную платформу Azure, однако без ввода банковских реквизитов здесь обойтись не получится.

Не отстает от своих конкурентов и Oracle, запустивший в 2015 году бесплатный облачный сервис LiveSQL.

image credit: https://livesql.oracle.com
  1. “SQL and relational databases 101 на платформе Cognitive Class (ранее IBM Big Data University)

Прошлым летом этот курс помог мне освежить мои знания по SQL. Курс компактный, дает только самое необходимое. Рассчитан на людей, готовых искать недостающую информацию самостоятельно. Несомненный плюс — в рамках курса предлагаются два неплохих учебника по базам даных (в основном DB2), а также возможность поупражняться на платформе IBM. Есть также приложение для Android (в бета-версии), а приложение для iOS обещают скоро выложить.

2. “Intro to SQL for data science” на платформе DataCamp

Курс мне понравился возможностью вволю напрактиковаться в синтаксисе PostgreSQL. Кстати, этот курс можно проходить и в мобильном приложении, и оно, что приятно, работает оффлайн. Одно «но»: в программе недостаточно проработаны или вовсе опущены некоторые важные темы: joins, unions, манипуляции с таблицами и пр. (Зато они отлично разобраны в курсе “SQL for data science” на платформе Coursera, о котором речь чуть ниже). Насколько понимаю, сделано это сознательно. Надо ж ребятам из DataCamp как-то монетизировать свои усилия. Они и без того очень много ресурсов и энергии вкладывают в развитие качественного онлайн-обучения.

3. Coursera -вский курс “SQL for data science” разработан University of California, Davis, и строится в основном на синтаксисе SQLite. При этом, преподаватель не забывает рассказывать и об отличиях других процедурных расширениях SQL. Несомненный плюс курса — многочисленные ссылки на различные тематические ресурсы. К примеру, мне там попалась ссылка на отличный блог-пост “Чем отличается мышление на SQL от мышления на Python”.

4. Курс “Operating on data in SQL” от Vertabelo Academy

Vertabelo Academy – моя личная находка 2018 года. Сайт прекрасен и своими учебными курсами, и блогом, и кейсами. Между прочим, эксперты Vertabelo с 2016 года сотрудничают с Uber и за это время обучили на специально созданной платформе несколько тысяч сотрудников этой компании.

5. Курсы Microsoft Virtual Academy

На данный момент там доступны целых 48 курсов по разным аспектам работы с SQL решениями. Начать можно, скажем, вот с этого, а а совершенстоваться здесь.

6. Bootcamp SQL for Python

Это — небольшой 4-х модульный курс, дающий представление о том, что как можно совместно использовать Python и СУБД SQLite.

  • SQL Island — симпатичная игрушка, на которой легко зависнуть. Расчитана на обучение студентов младших курсов технических вузов. Предполагает прохождение примерно 30 уровней, подробнее здесь.
  • SQLfiddle.com — интерактивный сервис, на котором можно создать базу данных, используя собственную схему, выбрать базовый движок из MySQL, PostgreSQL, MS SQL Server, Oracle и SQLite; и затем практиковаться в написании запросов.
  • SQLZOO Говорят, его любят англоговорящие ИТ рекрутеры.
  • Раздел по SQL на платформе Hackerrank (судя вот по этому видео, сервис тоже задумывался для того, чтоб облегчить работу ИТ-рекрутерам. Лично я эту платформу еще не пробовала, но в сети ее часто хвалят за систему соревнований и требования к коду).

1)Начну, пожалуй, с Джо Селко – человека-легенды, автора огромного количества великолепных книг и статей по SQL. Ну, кто еще способен так четко выхватить суть и написать об изучении языков?

“Learning a new programming language is much like learning a foreign language. At first, you mispronounce words and try to use the word order and syntax of your native language. Then you can assemble a proper sentence using a template and a bit of effort. Finally, you actually think and speak that foreign language and do not have to really focus on the effort”. (“Thinking in sets. Auxiliary, temporary and virtual tables in SQL”)

«Изучение нового языка программирования очень напоминает изучение иностранного языка. Сначала вы неверно произносите слова и пытаетесь использовать порядок слов и синтаксис своего родного языка. Затем вы можете собрать правильное предложение, используя шаблон и применив немного усилий. Наконец вы в самом деле думаете и говорите на иностранном языке и не должны сосредотачиваться на этом».

Джо Селко соцсети особо не жалует. Завел свою страницу в LinkedIn, и этим ограничился. Однако я все-таки нашла один ресурс, где его тексты по SQL появляются с некоторой периодичностью.

2) Блог академии Vertabelo ведет кто-то очень с хорошим чувством юмора и пониманием рыночных трендов. Готовитесь к Рождеству? Получите пост Delivering Christmas Presents: Santa’s Data Model (модель данных от Санта Клауса). Ожидаете День св. Валентина? Его можно встретить, вооружившись информацией о “A dating app model” (модель данных приложения для дейтинга). Интересуетесь криптовалютами и всем, что с ними связано? ОК, вот вам пост “A Data Model for Trading Stocks, Funds, and Cryptocurrencies” (модель данных для торговли акциями, фондами и криптовалютами).

3) Кендра Литтл, создательница сайта SQLworkbooks.com тоже ведет свой блог. А еще поддерживает канал сайта на YouTube и записывает подкаст Dear SQL DBA. Одно непонятно, когда она все успевает.

4) Если есть желание получше разобраться в стандарте SQL:2016, стоит почаще заглядывать в блог консультанта, коуча и автора книги ”SQL performance explained” Маркуса Винанда. Его блог и сайт называются Modern SQL.

  • Самый лучший, конечно же, зовут Stack Overflow. Между прочим, у него обнаружилась русскоязычная версия. В отличие от своего мега известного англоязычного тезки этот форум менее посещаем. Но чем черт не шутит?
  • Раздел (или subreddit) по SQL социального новостного сервиса reddit.com
  • Двуязычный (rus/engl) cайт sql-ex.ru существует с 2002 года. У него отличное практическое наполнение, при этом не самый привлекательный интерфейс. Из полезных фишек отмечу большой массив примеров, возможность сертификации, внутренний рейтинг тех, кто прошел сертификацию, и раздел для поиска работы.
  • SQL хаб на портале Habrahabr ( читать его стоит хотя бы ради комментариев)
  • Время от времени связанные с SQL темы обсуждают и на dou. ua (в основном, в ленте, реже — в других разделах). Правда, поиск по ключевым словам иногда глючит, так что лучше пользоваться тэгом “SQL Server” или гуглить, набрав заветную комбинацию “SQL site://dou.ua.”

a)Lecture 9 (2016) и b) Lecture 9 (2016)

Это — небольшая и на редкость оригинальная книга . Кода в ней почти нет, зато есть подсказки, как его писать. Чем-то напоминает тренировки шахматистов, когда они разыгрывают партии в уме (например, как в сцене между Б. Фишером и его наставником в кинофильме «Жертвуя пешкой»).

  • Все-все книги Джо Селко по SQL какие только найдутся. Во избежание разночтений и кривотолков лучше, конечно, читать последние издания. Та же его “SQL for smarties“ последний раз переиздавалась в 2014м. На русском эта книга выходила под названием «SQL для профессионалов», хотя по-моему, перевода версии от 2014 года еще не было.
  • The language of SQL” (автор Larry Rockoff)

В книге разбирается синтаксис трех наиболее популярных СУБД — Microsoft SQL Server, MySQL и Oracle. Именно из нее я узнала, кому MySQL принадлежит, хотя формально это — open source СУБД. Плюс понравилось, что у MySQL есть три стиля комментирования, причем один из них — с использованием # — совпадает со стилем комментирования для Python.

Упражнения SQL




Сегодня у нас 248 посетителей ( 24 новых).
54 упражнений выполнено ( 0 на SELECT и 54 на DML),
на этапе обучения - 424

Практическое владение языком SQL

Этот сайт поможет каждому получить или улучшить навыки строительства. Язык манипулирования данными SQL операторов.Чтобы тренироваться, вам придется построить себя операторы SQL для поиска или изменения конкретных данных, необходимых в упражнениях. Если ваш запрос неверен, вы сможете увидеть строки, возвращенные правильным запрос вместе с тем, который возвращается Вашим запросом. Кроме того, вы можете выполнять произвольные DML для доступных баз данных, установив параметр «Без проверки». Есть пять уровней сложности (от 1 до 5), вы можете увидеть это во втором столбце список упражнений.Предлагаем упражнения по извлечению данных (оператор SELECT, ) и упражнения по изменению данных (инструкции INSERT, UPDATE, DELETE и MERGE ). О ваших успехах в решении упражнений свидетельствует рейтинг участников. Это происходит в три этапа: первое (первые 5 упражнений) выполняется без контроля времени для индивидуума упражнение, второе (начинается с упражнения №6) контролирует время выполнения каждого задача.На третьем этапе, который относится к оптимизирует и начинается с упражнения № 139, требуется не только правильно решить упражнение, но и время выполнения запроса должно быть соизмеримо со временем выполнения авторского решения.
Упражнения первого этапа доступны без регистрации и могут быть решены. в любом порядке. Решение остальных упражнений требует регистрации. РЕГИСТРАЦИЯ БЕСПЛАТНАЯ , как и для всех остальных сервисов сайта.В третьем столбце упражнений перечислите Вы смогут видеть («ОК») заметки с номерами выполненных упражнений, но это доступно только зарегистрированным пользователям. Собственно, это основная причина регистрации. Если Вы захотите снова посетить наш сайт, Вам не нужно будет вспоминать, какой упражнения, которые вы уже сделали, а которые нет. Если вы не хотите регистрироваться, Вы можете войти в качестве гостя, но в этом случае ваши результаты не будут отслеживаться системой. Зарегистрированные пользователи также могут обсуждать решения упражнений на нашем форуме.

ПРИМЕЧАНИЕ: неверно сформулированный запрос может вернуть «правильные» данные о текущем состоянии базы данных. По этой причине Вы не должны удивляться, если результаты некорректного запроса будут совпадают с результатами правильного с Вашим запросом, оценивается системой Проверки как неверный.

ПРИМЕЧАНИЕ: Ваш браузер должен поддерживать файлы cookie и Javascript, чтобы обеспечить правильное использование этого сайта. Если вы используете фильтр содержимого, он должен позволять открывать дочерние окна для просмотра страниц справки.

Сертификат

Ваше успешное тестирование может быть подтверждено сертификатом «Специалист по языку манипулирования данными SQL». Мы поддерживаем качество нашего сертификата , периодически заменяя упражнения и меняя требования к сертификату.

Подробнее о сертификации. Что дает вам сертификат?

Используемый синтаксис SQL

Запросы пользователей выполняются SQL-сервером, что накладывает некоторые ограничения на синтаксис операторов SQL.Сейчас мы используем Microsoft SQL Server 2019 (15.0) на этапах рейтинга, и MariaDB-10.4 (совместимый с MySQL 8) , PostgreSQL 12.3 и Oracle Database 11g дополнительно на этапе обучения. Вот почему вы должны следовать синтаксис этих реализаций при построении запросов. Следует отметить, что синтаксис SQL, реализованный в Microsoft SQL Server, близок к стандарту SQL-92 . Но есть некоторые различия, среди них отсутствие NATURAL JOIN таблиц.Предоставляемая справка по языку манипулирования данными SQL проводится в соответствии с со стандартом SQL-92 и содержит информацию, необходимую для решения упражнений. Там же можно найти особенности используемой реализации (SQL Server 2005).

10 лучших результатов


Сертификация языка SQL (DML)

О сертификации

Мы считаем, что решение ряда упражнений свидетельствует о достаточно высокой квалификации.Учитывая это, а также желание наших посетителей иметь официальную поддержку своей квалификации, на сайте реализована процедура сертификации. Обратите внимание, что получение сертификата происходит по собственному желанию. Решение упражнений и участие в рейтингах по-прежнему остаются бесплатными.

На странице сертифицированных специалистов представлена ​​информация о владельцах сертификатов. Также наличие сертификата можно подтвердить, указав его номер ниже:

Требования для получения сертификата

Имеются сертификаты двух типов (см. Схемы).Первое может получить каждый которые выполнили все упражнения рейтингового этапа (до упражнения №63). Второй может получить каждый, кто решил 125 рейтинговых упражнений. Время на решение необходимого количества упражнений и рейтинговое положение не имеют значения. Тем не менее, мы оставляем за собой право изменять упражнения и количество упражнений, необходимых для получения сертификата.

Два типа сертификатов


Базовые знания
(необходимо решить 63 упражнения)

Все требования
(необходимо выполнить 125 упражнений)
Кроме того, необходимо выполнить 20 упражнений DML для сертификата типа BK и все упражнения DML для получения сертификата типа AR. Стоимость сертификатов может варьироваться, WebMoney принимает доллары США или евро. Текущие цены:
Базовые знания - 36 евро
Все требования - 36 евро
Все требования при наличии «Базовых знаний» - 18 Евро (50%)

Порядок заказа сертификата

  • Оформить заказ
  • Перевод платежа
    Оплата осуществляется переводом в системе WebMoney или через Western Union. Компания может платить за своего сотрудника; свяжитесь с нами.
  • Отправить сообщение об оплате (чтобы получить справку в кратчайшие сроки)
    Убедительная просьба: сообщите нам об оплате сертификата. От нас требуется как можно скорее оформить справку.

Через неделю после получения оплаты ваш сертификат будет отправлен заказным письмом на указанный адрес.

Попробуйте SQL Server 2019 в Центре оценки Microsoft

  1. Ознакомьтесь с примечаниями к выпуску SQL Server 2019 и требованиями к системе
  2. Зарегистрируйтесь, затем загрузите и установите предварительную версию для 180-дневной пробной версии
  3. Получать электронное письмо с ресурсами, которые помогут вам в предварительном просмотре


Руководство по установке

Файл простого установщика SQL Server (SSEI)

Примечание. Для установки SQL Server у вас должны быть права администратора на компьютере.При выборе «Загрузить» будет загружен установщик SQL Server. После запуска установщика он предоставит вам возможность выполнить немедленную «базовую» установку SQL Engine, полную «выборочную» установку или загрузить только носитель.

Если вы выбрали загрузку только носителя, а не установку, в выбранной папке будут доступны два формата загрузки носителя:

  1. Образ DVD-диска SQL Server (ISO)

Образ ISO можно использовать для монтирования и / или записи собственного DVD.После того, как установщик SQL Server загрузит SQLServervNext-x64- <язык> .iso:

  • Щелкните правой кнопкой мыши SQLServervNext-x64- .iso и выберите «Смонтировать». Найдите и запустите setup.exe на подключенном устройстве, чтобы начать установку.
  • С помощью программного обеспечения для записи DVD выберите параметры записи DVD из образа . ISO. После записи DVD найдите и дважды щелкните Setup.exe на DVD, чтобы начать установку.
  1. CAB-файл SQL Server

Программа установки SQL Server загрузит следующие сжатые файлы:

  • SQLServervNext-x64- <язык>.коробка
  • SQLServervNext-x64- <язык> .exe

После завершения загрузки дважды щелкните SQLServervNext-x64- .exe, чтобы начать процесс установки.

Образ контейнера Linux для SQL Server

Инструкции по извлечению и запуску SQL Server в контейнере Linux см. В образе контейнера SQL Server Linux на Docker Hub.

SQL Server в Linux

Для получения инструкций о том, как получить и установить SQL Server в Linux, перейдите на веб-страницу SQL Server.

Основные сведения о SQL Server

  • Выпуск Microsoft SQL Server НЕ поддерживается службой поддержки клиентов Microsoft (CSS).
  • Выпуск Microsoft SQL Server доступен только в целях тестирования и НЕ ДОЛЖЕН устанавливаться и использоваться в производственных средах.
  • Если у вас есть вопросы или проблемы, которые возникают во время тестирования и оценки, мы рекомендуем вам использовать форум UserVoice для SQL Server, чтобы искать ответы или задавать новые вопросы.

Вызов программы с SQL EX

 ENGINE DB2 SET PLAN  progplan 
CALLPGM  myprog  ...
КОНЕЦ
ПЛАН НАБОРА ДВИГАТЕЛЯ DB2 '' 

где:

progplan

Имя плана, требуемого программой.

myprog

Имя запускаемой программы.

КОМПЛЕКТНЫЙ ПЛАН '

Сбрасывает план.

An Альтернативой является использование пакетов z / OS Db2 CAF. Здесь каждая программа CALLPGM имеет свой собственный пакет (называемый тем же именем, что и программа), и все программы включены в список пакетов плана.

Для Например, предположим, что ваш план сервера называется PGMSQL. Ты хочешь иметь две хранимые процедуры, называемые SPG1 и SPG2, которые используют статические SQL для доступа к Db2.

В данном случае есть три базы данных Db2 ресурсные модули (DBRM) созданы: PGMSQL, SPG1 и SPG2. Создавать три пакета, называемые PGMSQL.PGMSQL, PGMSQL.SPG1 и PGMSQL.SPG2, используя команду СОЗДАТЬ ПАКЕТ. Затем свяжите пакеты вместе в план с помощью команды BIND PLAN с опцией списка пакетов. Когда сервер выполняет, Db2 автоматически выбирает пакет с то же название, что и программа.

Для получения дополнительной информации о тарифных планах, см. соответствующие руководства по Db2.

Все о защелках в SQL Server

Блокировки SQL Server, обсуждаемые в статье Все о блокировках в SQL Server, которые применяются к данным на время логической операции для сохранения согласованности логической транзакции. Защелки SQL Server, однако, представляют собой особый тип низкоуровневых системных блокировок, которые удерживаются, пока длится физическая операция на странице памяти, чтобы защитить согласованность памяти.

Защелки SQL Server - это внутренний механизм SQL Server, который служит для защиты ресурсов разделяемой памяти, таких как страницы и структуры данных памяти внутри буферного пула, чтобы координировать доступ к этим ресурсам и защищать их от повреждения.Разработанный как внутренний механизм SQL Server, который не доступен за пределами операционной системы SQL Server (SQLOS), защелками может управлять только сам SQL Server, а не пользователи (в отличие от блокировок, которыми можно управлять с помощью подсказок NO LOCK). Каждый раз, когда SQL Server должен читать память, он накладывает защелки на страницу или структуру внутренней памяти, к которым нельзя получить доступ надлежащим многопоточным способом. Таким образом, SQL Server устанавливает защелки в качестве ресурса для координации выполнения нескольких физических потоков в базе данных SQL Server.

Так же, как и блокировки, защелки SQL Server могут работать в различных режимах:

  • Уничтожить защелку (DT) : наиболее ограничительный режим защелки, получаемый, когда защелка уничтожается и буфер должен быть удален из кеша. Защелки DT блокируют даже защелку КП
  • Эксклюзивная защелка (EX) : получает исключительный контроль над записываемой страницей. Предотвращает захват всех других защелок на странице, где существует защелка EX
  • Защелка обновления (UP): ограничивающая, аналогична исключительной защелке, за исключением того, что она разрешает операции чтения для доступа к странице, но явно ограничивает любую операцию записи
  • Keep Latch (KP) : он служит для сохранения записи порядка защелки, а также для обеспечения того, чтобы он оставался в буфере, когда на нем устанавливается новая защелка
  • Shared Latch (SH) : получено на странице, когда запрос чтения, выданный странице, предоставляется

Как и в случае с замками, между различными режимами фиксации существует компонент совместимости или несовместимости.Таблица ниже дает представление о совместимости между различными защелками SQL Server.

Существует много различных типов защелок SQL Server, но по существу их можно разделить на три основные категории: защелки ввода-вывода, защелки буфера и защелки без буфера.

Защелки ввода / вывода

Защелки ввода-вывода выполняются в ситуациях, когда невыполненная операция ввода-вывода выполняется над страницами, хранящимися в пуле буферов, или, точнее, когда данные должны быть прочитаны или записаны в физическое хранилище.SQL Server будет использовать PAGEIOLATCH_XX типов ожидания, чтобы сообщить, когда процесс ожидает освобождения защелки ввода-вывода SQL Server.

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

Буферные защелки

Чтобы правильно понять защелки буфера, важно правильно понять идею, лежащую в основе пула буферов памяти, который разработан с целью максимизации производительности SQL Server. Пул буферов - это диапазон физической памяти, в котором данные, считываемые с диска, хранятся на страницах данных. Данные в таблицах SQL Server хранятся в виде страниц, и каждая страница имеет фиксированный размер 8192 байта (8 КБ). Всякий раз, когда страница данных должна быть прочитана или записана, она сначала помещается в пул буферов. Таким образом, любой дальнейший доступ к этой странице будет считываться непосредственно из пула буферов памяти, что повысит производительность SQL Server за счет минимизации дискового ввода-вывода.

Эта реализация концепции пула памяти в SQL Server является причиной того, что использование физической памяти SQL Server может быть высоким даже в ситуациях, когда SQL Server не работает.Загрузка данных в буферный пул основана на принципе «первым пришел - первым обслужен» (FIFO).

SQL Server использует диспетчер буферов для управления пулом буферов и, следовательно, отвечает за любые хеш-таблицы, массив пула, который содержит страницы, и за страницы, хранящиеся в буфере. SQLOS получает доступ к данным, хранящимся в памяти, исключительно через диспетчер буферов.

Страницы, которые изменяются в пуле буферов в результате выполнения команды вставки, удаления или обновления, являются так называемыми «грязными» страницами, в то время как немодифицированные страницы называются «чистыми» страницами.Поэтому, когда необходимо получить доступ к странице в памяти, операционная система SQL получит защелку буфера на этой странице. Но в отличие от блокировки, защелка SQL Server будет удерживаться не на время транзакции, а только в течение критического периода транзакции, и она будет выпущена, как только она больше не понадобится. SQL Server будет использовать PAGELATCH_XX типов ожидания, чтобы сообщить, когда процесс ожидает освобождения защелки буфера SQL Server.

Защелки небуферные

Небуферные защелки предназначены для защиты и гарантии любой структуры физической памяти, кроме страниц, хранящихся в буферном пуле. SQL Server будет использовать LATCH_XX типов ожидания, чтобы сообщить, когда процесс ожидает освобождения защелки буфера SQL Server. Небуферные защелки не часто встречаются во время, и поэтому они наименее документированы, но вот некоторые варианты использования, которые могут привести к конкуренции SQL Server с небуферными защелками:

  • Чрезмерный параллелизм - В ситуации, когда высокий уровень параллелизма используется на серверах с 12+ логическими процессорами, большинство, если не все, запросы могут соответствовать требованиям для использования планов параллельного выполнения.В такой ситуации небуферизованные защелки (LATCH_XX) будут получены в памяти для обеспечения синхронизации структур внутренней памяти, используемых планами параллельного выполнения.
  • Слишком много операций автоматического увеличения / автоматического сжатия - в системах с плохим планированием размера базы данных или емкости хранилища (неправильные настройки базы данных по умолчанию) операции автоматического увеличения могут выполняться часто. Кроме того, когда включено автоматическое сжатие, будет происходить частое сжатие базы данных.Когда выполняются операции увеличения и сжатия, SQL Server получает класс защелок FCB, FGCB_ADD_REMOVE и FGCB_ALLOC, чтобы обеспечить доступ к блоку управления файлом и синхронизированный доступ к информации, хранящейся в файловой группе.
  • Очень высокая частота операций DML для кучи и структур данных BLOB - В ситуации, когда чрезмерные операции DML выполняются с данными кучи и BLOB, необходимо убедиться, что все структуры внутренней памяти отвечают за выделение и освобождение страницы в кучу синхронизированы.В таких ситуациях могут встречаться чрезмерные типы ожидания LATCH_EX. Когда это происходит, типы ожидания ALLOC_CREATE_FREESPACE_CACHE, ALLOC_FREESPACE_CACHE, ALLOC_EXTENT_CACHE могут быть найдены как преобладающие типы ожидания через sys.dm_os_latch_stats DMV

Итак, исходя из предыдущего, в ситуациях, когда тип ожидания LATCH_XX имеет чрезмерные значения или это распространенные типы ожидания, полезно проверить, какие небуферные защелки преобладают в SQL Server, используя следующий запрос

ВЫБРАТЬ latch_class, wait_time_ms, wait_requests_count, 100. 0 * wait_time_ms / SUM

(wait_time_ms) OVER () AS '% защелок'

FROM sys.dm_os_latch_stats

WHERE latch_class NOT IN ('BUFFER')

AND wait_time_ms> 0

0

SuperLatches

Начиная с SQL Server 2005, были введены супер-защелки (также называемые подрешетками) для повышения эффективности SQL Server в высоко параллельных рабочих нагрузках OLTP для определенного шаблона использования (т.е. очень высокий общий доступ только для чтения к странице (SH), в то время как доступ для записи очень низкий. или не существует).Супер-защелки используются SQL Server только в системах NUMA с 32+ логическими процессорами. Этот механизм представляет собой эффективный способ SQL Server справиться с конкуренцией за защелки, динамически перемещая массив защелок в супер-защелку и, таким образом, разрешая запрос режима SH на супер-защелку, в то время как содержащие под-защелки могут оставаться в разных режимах. Когда это происходит, супер-защелка становится просто указателем на массив защелок SQL Server.

Superlatch будет вести себя как одна защелка со структурами под защелки, и может быть одна под защелка на раздел на каждое логическое ядро ​​ЦП.Таким образом, когда создается супер-защелка, рабочий поток ЦП просто должен будет получить общую (SH) под-защелку, которая назначена планировщику. Это гарантирует, что общая (SH) супер-защелка использует меньше ресурсов, и в то же время доступ к страницам более эффективен по сравнению с неразделенными общими защелками. Причина этого в том, что супер-защелке не требуется синхронизация глобального состояния, так как она будет обращаться только к локальной памяти NUMA.

Конфликт с защелкой

Конкуренция за защелки - частый сценарий для систем с большим количеством процессоров и является следствием ситуаций, когда в одной и той же структуре в памяти несколько потоков одновременно пытаются получить защелки SQL Server, несовместимые друг с другом.Поскольку защелки SQL Server управляются внутренним механизмом SQL Server, SQLOS сама определит, когда их использовать. Из-за детерминированного характера защелок SQL Server и их поведения различные параметры, такие как дизайн приложения или структура схемы базы данных, могут существенно влиять на защелки SQL Server.

В системах с высокой пропускной способностью, которые разработаны для большого количества процессоров и, следовательно, с высоким уровнем параллелизма, ожидается активная конкуренция за защелки, поскольку регулярное возникновение структур памяти часто осуществляется и защищается с помощью защелок.Но ситуация, когда время ожидания для типов конкуренции и ожидания защелок достаточно велико, чтобы снизить загрузку ЦП, приводит к снижению пропускной способности.

Распознавание и выявление признаков конфликта защелок очень важно, поэтому давайте прольем свет на некоторые симптомы конфликта защелок.

Ожидаемое поведение защелок SQL Server по отношению к транзакциям в секунду состоит в том, что количество транзакций в секунду будет увеличиваться вместе с увеличением среднего времени ожидания защелок SQL Server, которые сами по себе увеличиваются с медленной скоростью, которая будет в пределах пропускной способности. Такая ситуация представлена ​​на изображении ниже, и это желаемое поведение системы, которое указывает на то, что логические процессоры не конфликтуют друг с другом. В таком сценарии добавление большего количества логических процессоров означает, что можно сделать больше.

Ситуации, когда значение транзакций в секунду падает при включении дополнительных логических процессоров, в то время как среднее время ожидания защелки SQL Server увеличивается с большей скоростью, чем пропускная способность системы, потенциально указывают на то, что существует высокая вероятность того, что проблема с может существовать конфликт защелок.На следующем изображении представлена ​​типичная ситуация, когда добавление новых логических процессоров работало до определенного момента, когда начиналось более длительное время ожидания защелкивания. Это приводит к ситуации, когда добавление новых логических процессоров не будет иметь никаких преимуществ, вплоть до момента, когда количество транзакций в секунду начинает отрицательно влиять на производительность. Это типичная ситуация, когда добавление новых логических процессоров на самом деле имело отрицательный эффект, а не положительный, поскольку результирующая системная среда будет проводить много времени в состоянии ожидания.

Конфликт за защелки, который может повлиять на производительность OLTP, в основном возникает, когда высокий уровень параллелизма является результатом некоторых из следующих факторов:

  • Разработка приложения на основе высокой степени параллелизма - когда клиентское приложение выдает большое количество одновременных запросов к базе данных
  • Макет логических файлов SQL Server - структуры распределения, такие как глобальная карта распределения (GAM), общая глобальная карта распределения (SGAM), свободное пространство страницы (PFS) и карта распределения индексов (IAM), могут влиять на конкуренцию за защелку страниц, когда много параллельных потоков находятся в конфликте
  • Разработка схемы базы данных - шаблоны доступа к данным для чтения, записи, удаления, глубина дерева индекса B +, дизайн кластеризованных и некластеризованных индексов, размер и плотность строк на странице
  • Производительность подсистем ввода-вывода - довольно частая причина, поскольку из-за низкой производительности подсистемы ввода-вывода SQL Server должен ждать, пока данные будут перемещены в пул буферов. Чрезмерный тип ожидания PAGEIOLATCH_XX указывает на медленную подсистему ввода-вывода
  • Большое количество логических ЦП, назначенных SQL Server - Чрезмерная конкуренция за защелки, которая влияет на производительность SQL Server до неприемлемого уровня, указывается в системе с более чем 16 логическими ЦП, и чем больше логических ЦП доступно, тем выше уровень разногласий может быть
Никола - компьютерный фанат с 1981 года и энтузиаст SQL с намерением стать уродом.Специализируется на аудите SQL Server, соблюдении нормативных требований и мониторинге производительности.

Поклонник военной авиации и опытный авиамоделист. Любитель экстрима; парашютист и инструктор по прыжкам с тарзанки. Когда-то серьезно, теперь просто свободное время фотограф

Посмотреть все сообщения Николы Димитриевича

Последние сообщения Николы Димитриевича (посмотреть все)

sql ex ru # 41: SQL

Привет, помогите пожалуйста 🙁 Я пробовал все, что мог.

формулировка проблемы:

Для каждого производителя, у которого есть модели хотя бы в одной из таблиц ПК, Ноутбук или Принтер, определите максимальную цену на его продукцию.
Выход: производитель; если среди цен на продукты данного производителя есть значения NULL, отобразите NULL для этого производителя, в противном случае - максимальную цену.

схема базы данных:

Схема базы данных состоит из четырех таблиц:
Product (производитель, модель, тип)
PC (код, модель, скорость, оперативная память, hd, cd, цена)
Laptop (код, модель, скорость) , ram, hd, screen, price)
Принтер (код, модель, цвет, тип, цена)
Таблица Product содержит данные о производителе, номере модели и типе продукта («ПК», «Ноутбук» или « Принтер »).Предполагается, что номера моделей в таблице продуктов уникальны для всех производителей и типов продуктов. Каждый персональный компьютер в таблице PC однозначно идентифицируется уникальным кодом и дополнительно характеризуется своей моделью (внешний ключ относится к таблице Product), скоростью процессора (в МГц) - поле скорости, объемом оперативной памяти (в МБ) - оперативной памятью. , объем жесткого диска (в Гб) - hd, скорость CD-ROM (например, '4x') - cd, и его цена. Таблица Laptop аналогична таблице PC, за исключением того, что вместо скорости CD-ROM она содержит размер экрана (в дюймах) - screen.Для каждой модели принтера в таблице принтеров его тип вывода («y» для цвета и «n» для монохромного) - поле цвета, технология печати («Laser», «Jet» или «Matrix») - тип и цена. указаны.

вот некоторые из запросов, которые я пробовал:

# 1с cte as (выберите отдельного производителя, max (m_price) as p1

из

(выберите отдельного производителя, модель

из продукта

, где модель в ( выберите модель с ПК)) p

присоединиться к

(выберите модель,

макс (если цена NULL, затем NULL ELSE конец цены) как m_price

с ПК

, группа по модели) ПК на

P.model = PC.model

группировать по производителю

объединить все

выбрать отдельного производителя, макс (m_price) как p1

из

(выбрать отдельного производителя, модель

из продукта

где модель в (выбрать модель из Ноутбук)) p

присоединиться к

(выберите модель,

макс (если цена НУЛЬ, затем НУЛЬ ИНАЧЕ конец цены) как m_price

из Ноутбука

, группа по модели) L на

P. model = L. модель

группировать по производителю

объединить все

выбрать отдельного производителя, макс (m_price) как p1

из

(выбрать отдельного производителя, модель

из продукта

, где модель в (выбрать модель из принтера)) p

присоединиться к

(выберите модель,

макс (случай, когда цена NULL, а затем NULL ELSE конец цены) как m_price

с принтера

, сгруппируйте по модели) Pr на

P.model = Pr.model

group by maker)

SELECT DISTINCT maker, max (случай, когда p1 равно NULL, затем NULL ELSE p1 end) как m_price

из cte

group by maker

# 2

с n_maker as (выберите отдельного производителя, модель

из продукта

, где модель в (выберите модель на ПК)

union

выберите отдельного производителя, модель

из продукта

где модель в (выберите модель из портативного компьютера)

union

выберите отдельного производителя, модель

из продукта

, где модель в (выберите модель из принтера)),

как (выберите модель, цена

с ПК

union все

выберите модель, цена

от ноутбука

union all

выберите модель, цена

от принтера)

выберите производитель,

от n_maker n присоединитесь к cte на

n. model = cte.model

group by maker

и для обоих я получил ответ:

Ваш запрос вернул правильный набор данных в первой (доступной) базе данных, но он вернул неверный набор данных во второй проверяющей базе данных. * Несоответствие данных ( 3)

Изучите SQL с помощью онлайн-курсов и классов

Обзор

Что такое SQL?

Язык структурированных запросов (SQL) - это язык программирования, используемый для управления данными в реляционной базе данных. SQL может использоваться для изменения, вставки и удаления нескольких записей одновременно, в дополнение к другим функциям, и является стандартным языком, используемым для запросов к реляционной базе данных.Хотя SQL был принят в качестве стандарта, многие реализации имеют уникальные особенности или опускают части реализации SQL, что может сделать их несовместимыми друг с другом.

Зачем изучать SQL?

SQL - очень ценный навык, который нужно изучить и освоить, он также интуитивно понятен и прост в использовании. Он используется повсюду и для различных целей, включая: финансы, музыку, социальные сети, анализ данных и т. Д. Поэтому те, кто хорошо владеет SQL, всегда пользуются большим спросом. Большинство предприятий используют большие реляционные базы данных и всегда ищут людей, обладающих навыками использования SQL.

Изучите SQL для начинающих с помощью онлайн-курсов и обучения

Пройдите курсы вводного уровня от edX, чтобы изучить SQL для начинающих и узнать о sql-запросах, командах, синтаксисе, подзапросах, типах данных и т. Д. как применять запросы в SQL для создания, чтения, обновления и удаления данных в базе данных, концепции ограничения целостности объекта и ограничения ссылочной целостности (включая определение концепции внешнего ключа), эскизные модели концептуальных данных (включая ER) для описания структура базы данных и многое другое.

Онлайн-курсы и обучение SQL

Если вам интересно, как изучать SQL, вы попали в нужное место. На нашей платформе есть множество онлайн-курсов и учебных пособий по SQL, многие из которых предназначены для самостоятельного изучения и могут быть пройдены всего за несколько недель. Microsoft предлагает серию коротких курсов, предназначенных для углубленного изучения программирования SQL и подготовки к созданию баз данных SQL и управлению ими. Программа из 5 курсов охватывает основные навыки управления базами данных, необходимые для работы в сфере управления данными или в смежных областях.Курсы включают в себя разработку баз данных SQL, создание программных объектов базы данных SQL, управление транзакциями базы данных SQL и параллелизмом и оптимизацию производительности приложений на основе SQL. Изучите основы языка SQL, включая то, как проектировать и создавать таблицы базы данных, как проектировать нормализованную схему реляционной базы данных, как создавать индексы, реализовывать представления и обеспечивать целостность данных. Дополнительные бесплатные онлайн-курсы по SQL от Microsoft позволяют познакомиться с передовыми приложениями Microsoft SQL Server для анализа данных.

SQL-вакансии

Популярные SQL-вакансии включают SQL DBA, SQL Architect, SQL Database Engineer, Microsoft SQL Database Administrator и SQL Analyst, и, согласно Indeed.com, большинство должностей предлагают зарплату более 70 тысяч долларов в год. Лучшие места работы включают Нью-Йорк, Шарлотт, Чикаго, Вашингтон, округ Колумбия, и Филадельфию. Если вы только начинаете, существуют сотни должностей младшего администратора баз данных, которые позволят вам встать на ноги и начать получать ценный опыт и продвигаться по служебной лестнице.Кроме того, изучая SQL, вы добавляете ценный навык в свое резюме. Если вы планируете работать в области информатики или анализа данных, наличие этого навыка может быть очень полезным при приеме на работу. Изучение онлайн-курсов по Microsoft SQL может дать вам знания, ресурсы и опыт, необходимые для того, чтобы бороться за эти востребованные вакансии на сегодняшнем рынке труда. Зачем ждать! Выберите курс обучения SQL сегодня и начните изучать SQL.

Сделайте карьеру в качестве администратора SQL

Бум устройств, подключенных к Интернету, экспоненциально увеличивает объем данных, которые необходимо обрабатывать и управлять, что приводит к значительному росту числа рабочих мест по управлению базами данных.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *