Лекция 6: Особенности выполнения запросов · 2019-09-05 ·...

55
Лекция 6: Лекция 6: Особенности выполнения Особенности выполнения запросов запросов Лектор — Николаев В.В. Лектор — Николаев В.В. 2017 уч. год 2017 уч. год

Upload: others

Post on 15-Aug-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Лекция 6:Лекция 6:Особенности выполнения Особенности выполнения

запросовзапросов

Лектор — Николаев В.В.Лектор — Николаев В.В.2017 уч. год2017 уч. год

Page 2: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

0. Введение0. Введение

Page 3: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Курсовая работаКурсовая работа

1) представление предметной области (4.03.2017)

2) ER-модель (13.04.2017)

3) Даталогическая модель (06.05.2017)

4) Итоговое построение БД (01.06.2017)

Page 4: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Что должно быть:

● Индексы

● Триггеры, функции

● База данных должна быть заполнена данными

● Отчет, содержащий все предыдущие этапы

На защите могут быть вопросы по темам всех предыдущих этапов

4 этап КР4 этап КР

Page 5: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Лабораторная работа №3Лабораторная работа №3

Отчет должен содержать:

● Текст задания.

● SQL-код запросов.

● Планы выполнения для запросов 1,2.

● Описание индексов, полезных для выполнения запроса (запросы 1-7).

● Выводы.

Page 6: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

1. Индексы1. Индексы

Page 7: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Способы повышения производительности

запросов:

● Использование индексов.

● Настройка физических параметров СУБД

(способ разделения пространства хранения

данных, стратегии работы с транзакциями и

т. д.).

Повышение Повышение производительности запросовпроизводительности запросов

Page 8: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Индекс SQL — структура, состоящая из всех

значений для группы из одного или нескольких

столбцов.

Каждое значение имеет указатель на строку в

таблице, где это значение встречается.

ИндексыИндексы

Page 9: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ИндексыИндексы

company_id emp_name salary

18 Ivan 123

25 Pavel 124

17 Peter 245

13 Sergey 235

25 Eugene 546

25 Vladimir 345

27 Vyacheslav 234

19 Leonid 123

23 Ivan 34

11 Peter 546

13 Pavel 345

17 Alex 234

emp_table

Page 10: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ИндексыИндексы

company_id emp_name salary

18 Ivan 123

25 Pavel 124

17 Peter 245

13 Sergey 235

25 Eugene 546

25 Vladimir 345

27 Vyacheslav 234

19 Leonid 123

23 Ivan 34

11 Peter 546

13 Pavel 345

17 Alex 234

emp_table

SELECT * FROM emp_table

WHERE company_id = 17

Как найти нужные строки?

Page 11: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ИндексыИндексы

company_id emp_name salary

18 Ivan 123

25 Pavel 124

17 Peter 245

13 Sergey 235

25 Eugene 546

25 Vladimir 345

27 Vyacheslav 234

19 Leonid 123

23 Ivan 34

11 Peter 546

13 Pavel 345

17 Alex 234

emp_table

SELECT * FROM emp_table

WHERE company_id = 17

Перебираем все по очереди!

Page 12: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ИндексыИндексы

company_id emp_name salary

18 Ivan 123

25 Pavel 124

17 Peter 245

13 Sergey 235

25 Eugene 546

25 Vladimir 345

27 Vyacheslav 234

19 Leonid 123

23 Ivan 34

11 Peter 546

13 Pavel 345

17 Alex 234

emp_tableindex

11

13

13

17

17

18

19

23

25

25

25

27

Page 13: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ИндексыИндексы

company_id emp_name salary

18 Ivan 123

25 Pavel 124

17 Peter 245

13 Sergey 235

25 Eugene 546

25 Vladimir 345

27 Vyacheslav 234

19 Leonid 123

23 Ivan 34

11 Peter 546

13 Pavel 345

17 Alex 234

emp_tableindex

11

13

13

17

17

18

19

23

25

25

25

27

SELECT * FROM emp_table

WHERE company_id = 17

Page 14: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ИндексыИндексы

company_id emp_name salary

18 Ivan 123

25 Pavel 124

17 Peter 245

13 Sergey 235

25 Eugene 546

25 Vladimir 345

27 Vyacheslav 234

19 Leonid 123

23 Ivan 34

11 Peter 546

13 Pavel 345

17 Alex 234

emp_tableindex

11

13

13

17

17

18

19

23

25

25

25

27

SELECT * FROM emp_table

WHERE company_id = 17

Page 15: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ИндексыИндексы

company_id emp_name salary

18 Ivan 123

25 Pavel 124

17 Peter 245

13 Sergey 235

25 Eugene 546

25 Vladimir 345

27 Vyacheslav 234

19 Leonid 123

23 Ivan 34

11 Peter 546

13 Pavel 345

17 Alex 234

emp_tableindex

11

13

13

17

17

18

19

23

25

25

25

27

SELECT * FROM emp_table

WHERE company_id = 17

Page 16: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ИндексыИндексы

company_id emp_name salary

18 Ivan 123

25 Pavel 124

17 Peter 245

13 Sergey 235

25 Eugene 546

25 Vladimir 345

27 Vyacheslav 234

19 Leonid 123

23 Ivan 34

11 Peter 546

13 Pavel 345

17 Alex 234

emp_tableindex

11

13

13

17

17

18

19

23

25

25

25

27

SELECT * FROM emp_table

WHERE company_id = 17

Page 17: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Индексы работают неявно:

● При выполнении запроса СУБД определяет,

какие индексы нужно использовать.

● В рамках того или иного запроса СУБД может

не использовать индекс.

ИндексыИндексы

Page 18: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Индексы создаются по таблицам для ускорения операций, включающих:

● предложения WHERE и JOIN

● определение значений MIN() или MAX() по индексированному столбцу;

● сортировку и группировку столбцов таблицы

Правила работы с индексамиПравила работы с индексами

Page 19: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

● Индекс занимает место.

● При изменении/удалении содержимого

индексированного столбца/при добавлении

новой строки индекс необходимо обновлять. Эти

действия замедляют операции.

● Индексы неэффективны, если в таблице мало

строк.

Недостатки индексовНедостатки индексов

Page 20: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

● Какие операции будут применяться к таблицам:

запрос данных или обновление таблицы?

● Какие столбцы и как часто будут

использоваться в предикатах?

● Как часто столбцы таблиц будут использоваться

в соединениях (join)?

Стратегии примененияСтратегии применения

Page 21: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

● B-tree

● Hash

● GiST

● SP-GiST

● GIN

● BRIN

Индексы в PostgreSQLИндексы в PostgreSQL

Page 22: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

CREATE INDEX index_name

ON table_name (column_name);

CREATE INDEX index_name

ON table_name (column1_name, column2_name);

Создание индексов (1)Создание индексов (1)

Page 23: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

CREATE INDEX index_name ON table_name USING

btree(column1, column2);

Создание индексов (2)Создание индексов (2)

Page 24: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

B-treeB-tree

● Дерево — связный ациклический граф.

● Связность — означает наличие путей между

любой парой вершин;

● Ацикличность — отсутствие циклов и то, что

между парами вершин имеется только по

одному пути.

Page 25: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

B-treeB-tree

Page 26: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

B-treeB-tree

● B-дерево — структура данных, дерево поиска. С

точки зрения логического представления —

сбалансированное, сильно ветвистое дерево.

● Сбалансированность — длина любых двух путей от

корня до листьев различается не более, чем на

единицу.

● Ветвистость дерева — свойство каждого узла

дерева ссылаться на большое число узлов-

потомков.

Page 27: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

B-tree indexB-tree index

● B-tree (balanced tree index) — индекс

сгруппированный по листьям

сбалансированного дерева

Page 28: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ПримерПример

SELECT * FROM emp_table

WHERE company_id >= 53

company_id emp_name salary

41 Ivan 123

24 Pavel 124

65 Peter 245

36 Sergey 235

48 Eugene 546

55 Vladimir 345

59 Vyacheslav 234

51 Leonid 123

53 Ivan 34

54 Peter 546

22 Pavel 345

65 Alex 234

emp_table

Page 29: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

B-tree indexB-tree index

Page 30: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

B-tree indexB-tree index

● Значения (ключи) внутри каждого узла

отсортированы.

● Алгоритм сбалансирован: ключи равномерно

распределены по узлам, что позволяет

минимизировать количество переходов.

● Полезен при использовании совместно с =, >,

>=, <, <=, BETWEEN и подобными

операторами.

Page 31: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Hash-indexHash-index

Для построения такого индекса используется

хэш-функция

Page 32: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Hash-indexHash-index

● Очень эффективны, когда используется

прямое сравнение (на attr — hash index):

... WHERE attr = 1

● Но индекс не будет применен, если:

… WHERE attr = 1 OR A=10

Page 33: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

2. Выполнение запросов2. Выполнение запросов

Page 34: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Язык SQL декларативен:

● В запросах указывается, какими должны быть

данные, которые необходимо получить.

● Не говорится о том, как система должна

выполнить запрос.

Зачем это нужно?Зачем это нужно?

Page 35: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

● Чтобы выполнить SQL-запрос необходимо

построить программу — план выполнения

запроса.

● Таких программ может быть несколько.

План выполнения запросаПлан выполнения запроса

Page 36: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

СУБД должна:

● уметь построить все возможные программы,

результаты которых соответствуют заданному

SQL-запросу

● выбрать программу, выполнение которой

наиболее эффективно

План выполнения запросаПлан выполнения запроса

Page 37: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Критерий: оценочная стоимость выполнения

запроса по данному плану.

Компоненты оцениваемой стоимости:

● число обменов с устройствами внешней

памяти, которые потребуются при выполнении

плана запроса;

● среднее время обмена;

Выбор плана выполнения Выбор плана выполнения запросазапроса

Page 38: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Обозначения (реляц. алгебра)Обозначения (реляц. алгебра)

При построении плана выполнения запроса нам понадобится ряд обозначений из реляционной алгебры:

● R, S — отношения (таблицы)

● R ⋈θ S — соединение (тета-соединение), JOIN

Page 39: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ОбозначенияОбозначения

● σφ — операция выборки, применяется к отношению (σφ(R)) и определяет результирующее отношение, которое содержит только те строки (кортежи), которые удовлетворяют заданному условию (предикату).

SELECT * FROM STUDENTS WHERE

STUDENTS.GROUP = '3100' AND

STUDENTS.ID >= 150000;

σSTUDENTS.GROUPΛSTUDENTS.ID(STUDENTS)

Page 40: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ОбозначенияОбозначения

R ⋈θ S — соединение (тета-соединение), JOIN

R ⋈θ S = σθ(R X S)

Page 41: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ОбозначенияОбозначения

● π — проекция, применяется к отношению R (πattr(R)) и определяет новое отношение, содержащее только те атрибуты из R, которые были указаны в проекции:

SELECT attr1, attr2 FROM R …

πattr1, att2(R)

Page 42: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ЗаконыЗаконы

R ⋈θ S ≡ S ⋈θ R (коммутативность)

R ⋈θ θ (S ⋈φ T ) ≡ (R ⋈θ S) ⋈φ T (ассоциативность)

σθ∧φ (R) ≡ σθ (σφ (R))

σφ(R ⋈θ S) ≡ (σφ(R) ⋈θ S), если φ относится к атрибутам R

πA (R ⋈θ S) ≡ πA(π(A∪B)∩ attrs(R)(R) ⋈θ S), B — атрибуты из условия θ

Page 43: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ПримерПример

SELECT * FROM STUDENTS

JOIN EXAMS ON STUDENTS.ID = EXAM.STUD_ID

WHERE

STUDENTS.GROUP = '3100' AND

STUDENTS.ID >= 150000;

Какие планы выполнения запроса возможны?

Page 44: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ПримерПример

Page 45: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Расчет стоимости плана Расчет стоимости плана выполнения запросавыполнения запроса

Можно выделить 3 основных составляющих:

● Чтение входных или промежуточных таблиц.

● Запись промежуточных данных (материализация — результат сохраняется во временных отношениях после выполнения одной операции для обработки следующей операцией).

● Сортировка результата (DISTINCT).

Page 46: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

ПримерПример

Page 47: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Типы деревьев реляц. алгебрыТипы деревьев реляц. алгебры

а) левостороннее

б) смешанное линейное

в) нелинейное (куст)

R1 ⋈ R2 ⋈ R3 ⋈ R4

Page 48: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Левосторонние деревьяЛевосторонние деревья

● Обычно оптимизаторы запросов в СУБД рассматривают только левосторонние деревья, тк:

1) Необходимо сократить число планов для анализа.

2) Планы, основанные на левосторонних деревьях позволяют избежать материализации, используя конвейерную обработку данных.

Page 49: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Конвейерная обработка данныхКонвейерная обработка данных

● Конв. обр. данных — передача результатов одной операции на обработку другой без создания временных отношений (для хранения промежуточных результатов).

● Для планов, в которых большинство операций происходят в конвейере:

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

Page 50: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Конвейерная обработкаКонвейерная обработка

SELECT * FROM STUDENTSJOIN EXAMS ON STUDENTS.ID = EXAM.STUD_IDWHERE STUDENTS.GROUP = '3100' AND STUDENTS.ID >= 150000;

σSID>=150000∩GROUP=`3100`(STUDENTS)

σGROUP=`3100`(σSID>=150000(STUDENTS))

(Конвейерная обработка)

Page 51: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Влияние индексов (пример) — Влияние индексов (пример) — конвейерная обработкаконвейерная обработка

SELECT * FROM STUDENTSJOIN EXAMS ON STUDENTS.ID = EXAM.STUD_IDWHERE STUDENTS.GROUP = '3100' AND STUDENTS.ID >= 150000;

σSID>=150000∩GROUP=`3100`(STUDENTS)

σGROUP=`3100`(σSID>=150000(STUDENTS))

(Конвейерная обработка)

Page 52: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Влияние индексов (пример) — Влияние индексов (пример) — конвейерная обработкаконвейерная обработка

Индекс:

На STUDENT.GROUP или на STUDENT.ID

Если использовать план с этого слайда:

Hash index на STUDENT.GROUP

(оба индекса ставить не имеет смысла из-за конв.

обработки)

Page 53: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Советы при построении планаСоветы при построении плана

● Использовать конвейерную обработку (левосторонние планы, избегать блокирующих операций).

● Делать выборку как можно раньше.

● Делать проекции раньше.

● Цель: уменьшение размеров промежуточных данных.

Page 54: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

Самостоятельно (!)Самостоятельно (!)

● Нормализация (1-3 Нормальные формы).

Введение в реляционные базы данных / В. В. Кириллов, Г. Ю. Громов, глава 11 (стр. 211-223)

Page 55: Лекция 6: Особенности выполнения запросов · 2019-09-05 · Лекция 6: ... 2) er-модель (13.04.2017) 3) Даталогическая

При подготовке презентации использовались материалы из:

● Введение в реляционные базы данных / В. В. Кириллов, Г. Ю. Громов, Издательство: BHV, 2009 г.

● Документация PostgreSQL:

https://www.postgresql.org/docs/9.4/static/https://postgrespro.ru/docs/postgresql/9.4/index.html

ЛитератураЛитература

Лицензия к документации PostgreSQL:Юридическое уведомлениеPostgreSQL © 1996-2015 — PostgreSQL Global Development Group.Postgres95 © 1994-5 — Регенты университета Калифорнии.

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

УНИВЕРСИТЕТ КАЛИФОРНИИ НИ В КОЕЙ МЕРЕ НЕ НЕСЁТ ОТВЕТСТВЕННОСТИ ЗА ПРЯМОЙ, КОСВЕННЫЙ, НАМЕРЕННЫЙ, СЛУЧАЙНЫЙ ИЛИ СПРОВОЦИРОВАННЫЙ УЩЕРБ, В ТОМ ЧИСЛЕ ПОТЕРЯННЫЕ ПРИБЫЛИ, СВЯЗАННЫЙ С ИСПОЛЬЗОВАНИЕМ ЭТОГО ПРОГРАММНОГО ПРОДУКТА И ЕГО ДОКУМЕНТАЦИИ, ДАЖЕ ЕСЛИ УНИВЕРСИТЕТ КАЛИФОРНИИ БЫЛ УВЕДОМЛЁН О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА.

УНИВЕРСИТЕТ КАЛИФОРНИИ ЯВНЫМ ОБРАЗОМ ОТКАЗЫВАЕТСЯ ОТ ЛЮБЫХ ГАРАНТИЙ, В ЧАСТНОСТИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ КОММЕРЧЕСКОЙ ВЫГОДЫ ИЛИ ПРИГОДНОСТИ ДЛЯ КАКОЙ-ЛИБО ЦЕЛИ. НАСТОЯЩИЙ ПРОГРАММНЫЙ ПРОДУКТ ПРЕДОСТАВЛЯЕТСЯ В ВИДЕ "КАК ЕСТЬ", И УНИВЕРСИТЕТ КАЛИФОРНИИ НЕ ДАЁТ НИКАКИХ ОБЯЗАТЕЛЬСТВ ПО ЕГО ОБСЛУЖИВАНИЮ, ПОДДЕРЖКЕ, ОБНОВЛЕНИЮ, УЛУЧШЕНИЮ ЛИ МОДИФИКАЦИИ.