Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: База данных SQL Azure
Внимание
Эластичные запросы в режиме диспетчера карт сегментов (горизонтальное секционирование), используя EXTERNAL DATA SOURCE тип SHARD_MAP_MANAGER, достигают конца поддержки 31 марта 2027 г. После этой даты существующие рабочие нагрузки будут продолжать функционировать, но больше не будут получать поддержку, а создание новых внешних источников данных типа SHARD_MAP_MANAGER больше не будет возможным. Сведения о параметрах миграции см. в руководстве по миграции из режима диспетчера сопоставления сегментов эластичных запросов.
Если вы являетесь разработчиком программного обеспечения как услуги (SaaS), и внезапно сталкиваетесь с огромным спросом на ваше приложение, вам нужно приспособиться к росту. В результате добавляются новые базы данных (сегменты). Как перераспределить данные с учетом новых баз данных, не нарушив целостность данных? Для перемещения данных из ограниченных баз данных во вновь созданные используйте средство разбиения и слияния .
Средство разбиения и объединения выполняется как веб-служба Azure. Оно позволяет администратору или разработчику перемещать шардлеты (данные из сегмента) между разными базами данных (сегментами). Средство разбиения и объединения ведет базу метаданных службы, используя управление сопоставлениями сегментов, и обеспечивает согласованность сопоставлений.
Скачать
Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge
Документация
- Развертывание службы разделения и слияния для перемещения данных между шардинговыми базами данных
- Настройка параметров безопасности для службы разделения и объединения
- Горизонтальное масштабирование баз данных с помощью диспетчера карт сегментов
- Перенос существующих баз данных для горизонтального масштабирования
- Горизонтальное масштабирование с помощью базы данных SQL Azure
- Глоссарий средств эластичных баз данных
Зачем использовать инструмент разделения и объединения?
Гибкость
Приложениям требуется расширение за пределы отдельной базы данных Azure SQL. Используйте средство для переноса необходимых данных в новые базы данных без потерь.
Рост путем деления
Чтобы увеличить емкость и справиться с резким ростом, создайте дополнительную емкость путем сегментирования данных и распределения информации по постепенно возрастающему количеству баз данных, пока не будет достигнут нужный объем. Это — отличный пример применения функции разделения.
Сжатием путем слияния
Из-за сезонных изменений в характере бизнеса потребности в емкости могут меняться. Это средство позволяет сократить число единиц масштабирования, когда бизнес временно замедляется. Функция объединения в службе разбиения и объединения эластичного масштабирования отвечает данному требованию.
Управление хот-спотами путем перемещения шардлетов
При использовании одной базы данных несколькими клиентами определенное размещение шардлетов по сегментам может привести к падению производительности в некоторых сегментах. В такой ситуации потребуется перераспределить шардлеты или переместить нагруженные шардлеты в новые или менее загруженные сегменты.
Концепции и основные функции
Службы, размещаемые на стороне клиента
Служба разбиения/объединения реализуется в виде службы, размещаемой на стороне клиента. Необходимо развернуть и разместить службу в вашей подписке Microsoft Azure. Пакет, загружаемый через NuGet, содержит шаблон конфигурации, в который нужно внести информацию о вашем развертывании. Подробнее см. в руководстве по службе разбиения и слияния. Так как служба выполняется в подписке Azure, вы можете настроить большинство аспектов безопасности службы и управлять ими. Шаблон по умолчанию включает параметры настройки TLS, проверки подлинности клиента на основе сертификатов, шифрования для сохраненных учетных данных, защиты от отказа в обслуживании (DoS) и ограничений IP-адресов. Дополнительные сведения об аспектах безопасности можно получить в документе Настройка параметров безопасности для службы разбиения и объединения.
Служба, развернутая в стандартном виде, выполняется с одной рабочей ролью и одной веб-ролью. Каждая использует размер виртуальной машины A1 в облачных службах Azure. Хотя эти параметры нельзя изменить при развертывании пакета, их можно изменить после успешного развертывания в работающей облачной службе на портале Azure. Рабочая роль не должна быть настроена более чем для одного экземпляра.
Интеграция сопоставлений сегментов
Служба разбиения и объединения взаимодействует с картой сопоставления сегментов приложения. При использовании службы для разбиения и объединения диапазонов или перемещения данных между сегментами служба автоматически обновляет сопоставления сегментов. Для этого во время обработки запросов служба подключается к базе данных диспетчера сопоставления сегментов приложения и обновляет диапазоны ключей и сопоставления. Это гарантирует, что при выполнении операций разбиения и объединения задействованные сопоставления сегментов всегда будут иметь актуальные данные. Операции разделения, слияния и перемещения шардлетов реализуются путем перемещения пакета шардлетов из исходного шарда в целевой шард. Во время перемещения шардлета данные обрабатываемого шардлета отмечаются в карте сегментов как автономные и будут недоступны для подключений маршрутизации, управляемой данными, посредством API-интерфейса OpenConnectionForKey .
Согласованные подключения к шардлетам
При начале перемещения нового пакета шардлетов любые предоставленные картой сегментов подключения по маршрутизации на основе данных к сегменту, где хранится шардлет, обрываются и последующие подключения от API карты сегментов к этим шардлетам блокируются на время перемещения данных с целью предотвращения несогласованности. Подключения к другим шардлетам в пределах этого сегмента будут также разорваны, но могут быть немедленно восстановлены. После перемещения пакета шардлеты отмечаются как включенные в целевом сегменте, а исходные данные из исходного сегмента удаляются. Служба выполняет эти действия для каждого пакета, пока не будут перемещены все шардлеты. Это приведет к нескольким завершающим операциям подключений во время операций разделения, слияния и перемещения.
Управление доступностью шардлетов
Ограничение разрыва подключений рамками обрабатываемого в данный момент пакета шардлетов, как оговорено выше, ограничивает объем недоступных данных одним пакетом шардлетов. Такой подход более предпочтителен, чем если бы во время осуществления операции разбиения/объединения был недоступен весь сегмент. Размер пакета, который определяется количеством уникальных шардлетов для перемещения за момент времени, – это настраиваемый параметр. Его можно определить для каждой операции разделения и слияния в зависимости от потребностей в доступности и производительности приложения. Диапазон, заблокированный на карте сегментов, может быть больше указанного размера пакета. Это происходит потому, что служба выбирает размер диапазона таким образом, чтобы фактическое количество значений ключа сегментирования в данных примерно соответствовало размеру пакета. Это важно помнить, в особенности при наличии разреженных ключей сегментирования.
Хранилище метаданных
Служба разбиения и объединения использует базу данных для хранения состояния и журналов во время обработки запроса. Пользователь создает эту базу данных в своей подписке и указывает строку подключения в файле конфигурации для развертывания службы. Администраторы из организации пользователя также могут подключаться к этой базе данных для проверки хода выполнения запроса и изучения подробных сведений о потенциальных сбоях.
Сведения о сегментировании
Служба разбиения и объединения различает сегментированные таблицы (1), ссылочные таблицы (2) и обычные таблицы (3). Семантика операций разбиения, объединения и перемещения зависит от типа таблицы и определяется следующим образом:
Сегментированные таблицы
Операции разделения, объединения и перемещения переносят шардлеты из исходного сегмента в целевой. После успешного завершения всего запроса эти шардлеты удаляются из исходного сегмента. Целевые таблицы должны существовать на целевом шарде и не должны содержать данные в указанном целевом диапазоне перед обработкой операции.
Ссылочные таблицы
Для ссылочных таблиц операции разделения, объединения и перемещения копируют данные из исходного сегмента в целевой. Однако, обратите внимание, что в целевом сегменте не происходит изменений, если в заданной таблице уже присутствуют какие-либо строки. Для осуществления операции копирования ссылочной таблицы целевая таблица должна быть пустой.
Другие таблицы
В исходном или целевом сегменте операции разделения и объединения могут присутствовать другие таблицы. Служба разбиения и объединения не затрагивает эти таблицы при любых операциях перемещения или копирования данных. Учтите, что они могут помешать этим операциям в случае наличия ограничений.
Информация о ссылочных и сегментированных таблицах предоставляется интерфейсами API
SchemaInfoв сопоставлении сегментов. Следующий пример демонстрирует использование этих API для объекта диспетчера сопоставления сегментов.// Create the schema annotations SchemaInfo schemaInfo = new SchemaInfo(); // reference tables schemaInfo.Add(new ReferenceTableInfo("dbo", "region")); schemaInfo.Add(new ReferenceTableInfo("dbo", "nation")); // sharded tables schemaInfo.Add(new ShardedTableInfo("dbo", "customer", "C_CUSTKEY")); schemaInfo.Add(new ShardedTableInfo("dbo", "orders", "O_CUSTKEY")); // publish smm.GetSchemaInfoCollection().Add(Configuration.ShardMapName, schemaInfo);Таблицы и
regionопределены в качестве ссылочных таблицnationи будут скопированы с помощью операций разделения или слияния и перемещения.customerиorders, в свою очередь, определяются как сегментированные таблицы.C_CUSTKEYиO_CUSTKEYиспользуются в качестве ключа сегментирования.
Ссылочная целостность
Служба разбиения и объединения анализирует зависимости между таблицами и использует связи внешнего ключа и первичного ключа для выполнения операций перемещения ссылочных таблиц и шардлетов. В общем случае в первую очередь копируются ссылочные таблицы в порядке зависимости, затем копируются шардлеты в порядке их зависимостей в каждом пакете. Это нужно для того, чтобы учитывать ограничения внешнего ключа-основного ключа целевого сегмента при поступлении новых данных.
Согласованность сопоставления сегментов и завершение операций
Служба разбиения и объединения возобновляет работу после любого сбоя и стремится завершить любые активные запросы. Однако могут возникнуть неустранимые ситуации, например, когда целевой шард теряется или скомпрометирован без возможности восстановления. При таких обстоятельствах некоторые шардлеты, которые предполагалось переместить, продолжат находиться на исходном шарде. Служба обеспечивает обновление сопоставления шардлетов только после успешного копирования необходимых данных в целевой сегмент. Шардлеты удаляются только после копирования всех данных в целевой сегмент и успешного обновления соответствующих сопоставлений. Операция удаления осуществляется в фоновом режиме, после того как диапазон данных уже стал доступен на целевом сегменте. Служба разбиения и объединения всегда гарантирует правильность сопоставлений в сопоставлении сегментов.
Пользовательский интерфейс службы разбиения и объединения
Пакет службы разбиения и объединения включает рабочую роль и веб-роль. Веб-роль используется для отправки запросов на разбиение и объединение в интерактивном режиме. Существуют следующие основные компоненты пользовательского интерфейса.
Тип операции
Тип операции — это переключатель, определяющий вид операции, выполняемой службой для данного запроса. Вы можете выбрать между сценариями разделения, слияния и перемещения. Кроме того, запрошенную ранее операцию можно отменить. Вы можете использовать запросы на разделение, слияние и перемещение для карт сегментов диапазона. Сопоставления сегментов по списку поддерживают только операции перемещения.
Карта сегментов
Следующий раздел параметров запроса описывает сопоставление сегментов и базу данных, в которой размещается сопоставление сегментов. В частности, необходимо указать имя сервера и базы данных, в которой размещается карта сегментов, данные для подключения к базе данных c картой сегментов и, наконец, имя карты. В настоящее время операция принимает только один набор учетных данных. Эти учетные данные должны иметь достаточные разрешения для изменения сопоставления сегментов, а также пользовательских данных в этих сегментах.
Исходный диапазон (разделение и объединение)
Операции разделения и объединения обрабатывают диапазон, используя его нижний и верхний ключ. Чтобы указать операцию с несвязанным значением высокого ключа, установите флажок "Высокий ключ является максимальным" и оставьте поле с высоким ключом пустым. Указанные значения ключей диапазона не должны точно соответствовать сопоставлению и его границам в карте сегментов. Если вы не указываете границы диапазона, служба автоматически выводит ближайший диапазон. Сценарий PowerShell GetMappings.ps1 можно использовать для получения текущего сопоставления для данного сопоставления сегментов.
Поведение источника разделения (разделение)
Для операций разделения необходимо указать точку для разделения исходного диапазона. Это делается путем ввода ключа сегментирования для того места, в котором необходимо выполнить разбиение. Используйте расположенный рядом переключатель, чтобы указать, следует ли переместить нижнюю часть диапазона (за исключением ключа разбиения), или верхнюю часть диапазона (включая ключ разбиения).
Исходный шардлет (перемещение)
Операции перемещения отличаются от операций разделения или слияния, так как они не требуют диапазона для описания источника. Источник данных для перемещения просто определяется значением ключа сегментирования, который планируется переместить.
Целевой сегмент (разделение)
После введения информации об исходном сегменте для операции разделения необходимо указать, куда следует скопировать данные, предоставив серверу имя базы данных для целевого сегмента.
Целевой диапазон (объединение)
Операции объединения перемещают шардлеты в существующий сегмент. Существующий сегмент указывается путем ввода пределов диапазона сегмента, с которым необходимо выполнить объединение.
Размер пакета
Размер пакета определяет количество шардлетов, которые будут отключены во время перемещения данных. Это целочисленное значение, в котором можно использовать меньшие значения при учете длительных периодов простоя для сегментлетов. Увеличение значений приведет к тому, что данный шардлет будет дольше находиться в автономном режиме, но это может улучшить производительность.
Идентификатор операции (отмена)
Если идет выполнение операции, в которой больше нет потребности, можно отменить эту операцию, указав в этом поле ее идентификатор. Идентификатор операции можно получить из таблицы состояний запросов (см. раздел 8.1) или из выходных данных в браузере, через который был послан запрос.
Требования и ограничения
Текущая реализация службы разбиения и объединения соответствует следующим требованиям и ограничениям.
- Сегменты должны существовать и быть зарегистрированы в сопоставлении сегментов до выполнения операций разбиения и объединения над этими сегментами.
- Служба не создает таблицы или другие объекты базы данных автоматически в рамках своих операций. Это означает, что схемы для всех сегментированных таблиц и ссылочных таблиц целевого сегмента должны существовать до начала любой операции разбиения, объединения и перемещения. В частности, сегментированные таблицы должны быть пустыми в диапазоне, в который операцией будут добавляться новые данные. В противном случае операция завершится ошибкой при начальной проверке согласованности целевого сегмента. Также обратите внимание на то, что ссылочные данные копируются только в случае, если ссылочная таблица пуста. Не гарантируется согласованность с другими параллельными операциями записи в эти ссылочные таблицы. Рекомендуется не осуществлять другие операции записи для внесения изменений в эти ссылочные таблицы во время выполнения операции разбиения и объединения.
- Служба использует идентификатор строки, который задается уникальным индексом или ключом, включая ключ сегментирования, который повышает надежность больших шардлетов. Это позволяет службе перемещать данные с еще большей степенью детализации, чем просто значение ключа сегментирования. Это позволяет уменьшить максимальный объем пространства журнала и количество требуемых блокировок для проведения операции. Рекомендуется для данной таблицы создать уникальный индекс или первичный ключ, включая ключ сегментирования, если вы хотите использовать эту таблицу вместе с запросами разбиения, объединения и перемещения. Чтобы производительность повысилась, ключ сегментирования должен находиться в первом столбце ключа или индекса.
- Во время обработки запроса некоторые данные шардлета могут присутствовать как на исходном шарде, так и на целевом шарде. Это необходимо для защиты от сбоев при перемещении шардлетов. Интеграция операций разбиения и объединения с шард-картой гарантирует, что соединения через API маршрутизации, зависящие от данных, с использованием метода OpenConnectionForKey на шард-карте, не отображают несогласованные промежуточные состояния. Тем не менее при подключении к исходным или целевым сегментам без использования метода OpenConnectionForKey во время обработки запросов разбиения, слияния и перемещения могут наблюдаться несогласованные промежуточные состояния. Эти подключения могут отображать частичные или повторяющиеся результаты в зависимости от времени или сегмента, лежащего в основе подключения. В настоящий момент это ограничение распространяется на подключения, созданные многосегментными запросами эластичного масштабирования.
- База метаданных для службы разбиения и объединения не должна быть общей для различных ролей. Например, роль службы разбиения и объединения во время работы в промежуточном режиме должна ссылаться на базу метаданных, отличную от базы данных рабочей роли.
Выставление счетов
Служба разбиения и объединения выполняется как облачная служба в подписке Microsoft Azure. Поэтому плата взимается с вашего экземпляра облачных служб. Если вы нечасто выполняете операции разбиения, объединения и перемещения, рекомендуем удалить облачную службу разбиения и объединения. Это поможет сократить расходы на действующие или развернутые экземпляры облачной службы. Готовую к работе конфигурацию можно повторно развернуть и запустить всякий раз, когда потребуется выполнить операции разбиения и объединения.
Наблюдение
Таблицы состояния
Служба разбиения и слияния предоставляет таблицу RequestStatus в базе данных хранилища метаданных для отслеживания завершенных и выполняемых запросов. В таблице перечислены строки для каждого запроса разбиения и объединения в данном экземпляре службы. В ней представлена следующая информация для каждого запроса:
Timestamp
Время и дата начала запроса.
OperationId
Глобальный уникальный идентификатор запроса. Этот запрос также можно использовать для отмены операции, пока она продолжается.
Состояние
Текущее состояние запроса. Для выполняемых запросов в ней также приведен текущий этап выполнения запроса.
CancelRequest
Флаг, указывающий, отменен ли запрос.
Ход выполнения
Процентная оценка хода выполнения операции. Значение 50, указывает, что операция завершена примерно на 50 %.
Сведения
Более подробный отчет о ходе выполнения в формате XML. Отчет о ходе выполнения периодически обновляется по мере копирования наборов строк из исходного в целевой сегмент. В случаях ошибок или исключений в этом столбце также содержится более подробная информация об ошибке.
Система диагностики Azure
Служба разбиения и объединения для наблюдения и диагностики использует систему диагностики Azure из Azure SDK 2.5. Сведения о настройке диагностики см. в статье "Включение диагностики" в облачных службах Azure и виртуальных машинах. Загружаемый пакет содержит две конфигурации диагностики: для веб-роли и для рабочей роли. В нем описаны журналы счетчиков производительности, журналы IIS, журналы событий Windows и событий приложения разбиения и объединения.
Развертывание диагностики
Примечание.
В этой статье предусмотрено использование модуля Azure Az PowerShell, который является рекомендуемым модулем PowerShell для взаимодействия с Azure. Чтобы начать работу с модулем Az PowerShell, ознакомьтесь со статьей Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.
Внимание
Модуль PowerShell Azure Resource Manager (AzureRM) был объявлен устаревшим 29 февраля 2024 г. Все будущие разработки должны использовать модуль Az.Sql. Пользователям рекомендуется перейти с AzureRM на модуль Az PowerShell, чтобы обеспечить продолжение поддержки и обновлений. Модуль AzureRM больше не поддерживается и не обновляется. Аргументы команд в модуле Az PowerShell и в модулях AzureRM существенно идентичны. Дополнительные сведения о совместимости см. в статье Знакомство с новым модулем Az PowerShell.
Чтобы включить наблюдение и диагностику с помощью конфигурации диагностики для веб- и рабочих ролей, предоставленных пакетом NuGet, выполните следующие команды с помощью Azure PowerShell:
$storageName = "<azureStorageAccount>"
$key = "<azureStorageAccountKey"
$storageContext = New-AzStorageContext -StorageAccountName $storageName -StorageAccountKey $key
$configPath = "<filePath>\SplitMergeWebContent.diagnostics.xml"
$serviceName = "<cloudServiceName>"
Set-AzureServiceDiagnosticsExtension -StorageContext $storageContext `
-DiagnosticsConfigurationPath $configPath -ServiceName $serviceName `
-Slot Production -Role "SplitMergeWeb"
Set-AzureServiceDiagnosticsExtension -StorageContext $storageContext `
-DiagnosticsConfigurationPath $configPath -ServiceName $serviceName `
-Slot Production -Role "SplitMergeWorker"
Дополнительные сведения о настройке и развертывании параметров диагностики см. в статье Включение диагностики в облачных службах Azure и виртуальных машинах.
Получение диагностики
Диагностику можно получить при помощи Visual Studio Server Explorer, смотрите узел Azure в дереве обозревателя сервера.
- Откройте экземпляр Visual Studio и в строке меню выберите "Вид" и "Обозреватель серверов".
- Щелкните значок Azure, чтобы подключиться к подписке Azure.
- Перейдите в Azure -
Хранилище - - Таблицы - .
Дополнительные сведения см. в описании обозревателя сервера.
WaDLogsTable, выделенный на рисунке выше, содержит подробные события из журнала приложений службы разделения слиянием. Конфигурация скачаемого пакета по умолчанию ориентирована на развертывание в рабочей среде. Как следствие, интервал извлечения журналов и счетчиков из экземпляров службы достаточно большой (5 минут). Для тестирования и разработки можно сократить этот интервал, изменив настройки параметров диагностики веб-роли или рабочей роли. Щелкните правой кнопкой мыши роль в Visual Studio Server Explorer (см. выше) и затем измените период передачи в диалоговом окне настройки параметров диагностики:
Производительность
Обычно высокая производительность ожидается на высших, более производительных уровнях служб. Более высокие объемы ввода-вывода, ЦП и памяти для более высоких уровней служб приносят пользу операциям массового копирования и удаления, которые использует служба разделения-слияния. По этой причине повышать уровень служб нужно только для этих баз данных на ограниченный период времени.
Служба также выполняет запросы проверки в процессе обычной работы. Эти запросы проверяют непредвиденное наличие данных в целевом диапазоне и контролируют запуск любой операции разбиения, объединения и перемещения из согласованного состояния. Все эти запросы работают с ключом сегментирования, который задает область действия операции. С запросом также передается размер пакета. Эти запросы лучше всего выполнять при наличии индекса с ключом сегментирования в первом столбце.
Кроме того, свойство уникальности при наличии ключа сегментирования в первом столбце позволят службе использовать оптимизированный алгоритм ограничения потребления ресурсов для журналов и памяти. Это свойство уникальности необходимо для перемещения больших объемов данных (обычно свыше 1 ГБ).
Обновление
- Выполните действия, описанные в разделе "Развертывание службы разделения слияния" для перемещения данных между сегментированных баз данных.
- Измените файл конфигурации облачной службы для развертывания разбиения и объединения, чтобы были отражены новые параметры конфигурации. Новый обязательный параметр — это сведения о сертификате, используемом для шифрования. Проще всего сделать это, сравнив загруженный новый шаблон конфигурации с существующей конфигурацией. Убедитесь, что вы добавите параметры как для
DataEncryptionPrimaryCertificateThumbprintинтернета, так иDataEncryptionPrimaryдля рабочей роли. - Перед развертыванием обновления в Azure убедитесь, что завершены все текущие операции разбиения и объединения. Это можно сделать, запросив таблицы RequestStatus и PendingWorkflows в базе данных метаданных разбиения и объединения для текущих запросов.
- Обновите существующее развертывание облачной службы для разбиения и объединения в подписке Azure с новым пакетом и обновленным файлом конфигурации службы.
Для обновления в условиях использования операций разбиения и объединения не требуется подготавливать новую базу данных метаданных. Новая версия метаданных существующей базы данных автоматически обновляется до новой версии.
Рекомендации и устранение неполадок
- Рекомендуется создать клиент для тестов и проверить наиболее важные операции разбиения, объединения и перемещения на нескольких сегментах с использованием этого тестового клиента. Убедитесь, что все метаданные определены правильно в карте сегментов и что операции не нарушают ограничения или внешние ключи.
- Оставьте размер данных тестового клиента выше максимального размера данных крупнейшего клиента, чтобы не столкнуться с проблемами, связанными с размером данных. Это позволит оценить верхнюю границу времени перемещения всех данных одного клиента.
- Убедитесь, что схема допускает удаления. Службе разбиения и объединения требуется возможность удаления данных из исходного сегмента после успешного копирования данных в целевой сегмент. Например, триггеры удаления могут предотвратить удаление данных службой на источнике и стать причиной сбоев в работе.
- Ключ сегментирования должен быть первым столбцом первичного ключа или определения уникального индекса. Это обеспечивает наилучшую производительность как для запросов проверки разбиения и объединения, так и для фактических операций перемещения и удаления данных, которые всегда работают с диапазонами ключей сегментирования.
- Разместите свою службу разбиения и объединения в области и центре данных, где располагаются ваши базы данных.
Связанный контент
Еще не используете средства эластичных баз данных? Ознакомьтесь с нашим руководством по началу работы. Возникшие вопросы вы можете задать нам на странице вопросов Microsoft Q&A по Базе данных SQL. Что касается запросов новых функций, вы можете поделиться новыми идеями или проголосовать за существующие на форуме отзывов по Базе данных SQL.