Страницы

Поиск по вопросам

Показаны сообщения с ярлыком azure. Показать все сообщения
Показаны сообщения с ярлыком azure. Показать все сообщения

понедельник, 24 февраля 2020 г.

Как удалить много записей из базы данных [закрыт]

#sql #sql_server #aspnet_mvc #azure


        
             
                
                    
                        
                            Закрыт. Этот вопрос необходимо уточнить или дополнить
подробностями. Ответы на него в данный момент не принимаются.
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            Хотите улучшить этот вопрос? Добавьте больше подробностей
и уточните проблему, отредактировав это сообщение.
                        
                        Закрыт 4 года назад.
                                                                                
           
                
        
Простое удаление работает очень долго (около 40 секунд из одной таблицы, в которой
примерно 1,5 миллиона записей), нужно сделать быстрее (нужно удалить все данные пользователя).
База MSSQL.
    


Ответы

Ответ 1



Если нужно удалить ВСЕ записи из некоторой таблицы, используйте TRUNCATE, предварительно удалив внешние ключи, которые ссылаются на таблицу. Это самый быстрый способ. Он, в частности, игнорирует триггеры. Если просто большое количество, то нужно удалять пачками. Оптимизировал я job, который удалял устаревшие данные, порядка ~100млн. строк в неделю. запускался на выходных. Опытным путём пришёл к выводу, что быстрее всего строки удаляется пачками по 100-500 штук. Создаём временную табличку с ID'ами записей которые будем удалять. Пишем туда 100-500 ID'ов. и вызываем: DELETE T2 FROM #Table T1 INNER LOOP JOIN Table T2 ON T1.ID = T2.ID Здесь нужен именно LOOP. Хотя сервер скорее всего и без хинтов догадается. Вместо ID таблицы Table, может быть любой уникальный ключ. В случае, если ключ кластерный, то в таблицу #Table желательно вставлять ID'ы пачек строк, которые записаны в Table "рядом". Если целиком пачку удалить не удалось, вызываем удаление по одной записи и логируем результаты.(ну я так делал:)) потом утром анализируем. UPD: по поводу быстрого поиска удаляемых записей. Стоит создать индекс по UserId и посмотреть станет лучше или нет. UPD: чуть-чуть про то, почему именно пачками. Удаление по одной записи - это N транзакций. Выполняется довольно медленно... Таким был job до того, как я начал его оптимизировать. Пытаться удалить одним DML оператором ~1млн строк тоже плохо. Т.к. сама транзакция становится очень большой и рискуем получить нехватку памяти. Да и выполняется это долго. В итоге задавая размер пачки, я к каждой таблице подобрал оптимальное число одновременно удаляемых записей. Начальник был доволен(с) :)

пятница, 24 января 2020 г.

Проверка принадлежности группе безопасности Azure AD

#aspnet #active_directory #azure


Имеется Локальная Active Directory и её реплика в Azure Active Directory. Пишу Asp.net
приложение с аутентификацией через рабочие аккаунты в облаке, аутентификация работает
нормально. Хочу проверить, принадлежит ли пользователь определенной группе с помощью
такого кода:

User.Identity.IsInRole("имя_группы");


или

[Authorize(Role = "имя_группы")]


Проблема в том, что если в приложении windows-аутентификация, то в локальной AD группы
указываются как ДОМЕН\имя_группы (например Contoso\administrators), но в Azure AD же
нет доменов? Как правильно указать группу в условии?

Авторизация проходит через ADFS, который в том же Azure.
    


Ответы

Ответ 1



Так сделайте тестовую страничку, на которой без авторизации выведите список ролей пользователя. Например, так: public ActionResult Roles() => Content(string.Join(",", from claim in ((ClaimsIdentity)User.Identity).Claims.FindAll(ClaimTypes.Role) select claim.Value)); Сразу станет видно в каком формате там роли передаются.

среда, 25 декабря 2019 г.

Не удается опубликовать приложение уровня данных SQL Server 2014

#sql #sql_server #azure


Имеется две базы данных:


локальная - (localdb)\MSSQLLocalDB (SQL Server 12.0.2000)  
в azure -
sitename.database.windows.net (SQL Server 12.0.2000)


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

Вчера обновил Visual Studio до последней версии, и теперь при выполнении этой процедуры
я получаю ошибку


  Проект, где указана целевая платформа База данных SQL Microsoft Azure
  версии 12, не может быть опубликован в SQL Server 2014


Делаю все манипуляции через SQL Server Explorer в студии.

UPD: обе базы создавал давно, еще до выхода обновлений, уровни совместимости должны
совпадать (120)
    


Ответы

Ответ 1



Несмотря на совпадающую версию, в Azure SQL V12 включены некоторые из новых фич SQL 2016. Поэтому в Visual Studio 2015 Update 2 проверку совместимости между Azure SQL и SQL Server поменяли на более строгую. Если вы ничем из новых фич не пользуетесь - просто отключите проверку совместимости - выставьте Allow Incompatible Platform в Advanced Publish options. Статья в Microsoft Connect на эту тему: Database project - cannot deploy to local SQL 2014

пятница, 20 декабря 2019 г.

Как бесплатно попробовать azure?

#azure


Хочу начать работать с Azure, слышал что есть бесплатные способы это сделать. 
    


Ответы

Ответ 1



Дополню ответ Mikhail Vaysman: При регистрации нового аккаунта дается 12500 рублей (эквивалент 200$, если Вы из России) на 30 дней. Внимание: для регистрации необходимо указывать номер телефона и номер банковской карты с не 0 балансом, т.к. Microsoft делает тестовое списание небольшой суммы (не более 30 рублей) и ее возврат через некоторое время. Если данного времени не достаточно для тестирования всех возможностей сервиса, можно воспользоваться программой поддержки разработчиков от Microsoft Visual Studio Dev Essentials которая дополнительно предоставит 1600 рублей (25$) ежемесячно в течение года. Если у вас уже есть идея проекта, который хочется реализовать на платформе azure - можно попробовать воспользоваться программой спонсорской поддержки стартапов от Microsoft Bizspark, по данной программе каждому участнику стартапа будет предоставлено 9600 рублей (150$) в месяц для использования облачных сервисов в своей разработке, программа рассчитана максимум на 5 участников, длительность - 1 год.

Ответ 2



Переходите по ссылке Create your free Azure account today и получаете кредит в 200$. Там же написано и про бесплатные сервисы.

понедельник, 16 декабря 2019 г.

Настройка CI/CD для публикации приложения в Azure

#visual_studio #aspnet #azure #непрерывная_интеграция #devops


Хочу использовать Visual Studio Team Services для сборки и публикации своего ASP.NET
приложения в Azure Web Application. Раньше публиковал с помощью Web Deploy в Visual
Studio, и там мой профиль публикации содержал следующие данные:


Строка подключение к базе SQL Azure
Параметры для включения аутентификации в Azure AD


Теперь же, когда публикация происходит с помощью CI/CD конвейера, эти параметры не
подставляются и приложение публикуется в облако со строкой подключения и параметрами,
которые были на локальной машине. 

Вопрос: есть ли способ внести в Build Definition эти настройки? Импортировать профиль
публикации при развертывании или еще какие-либо способы корректно развернуть приложение
в облаке?
    


Ответы

Ответ 1



Если вы публикуете приложение именно как Azure Web Application, то вам не нужно править конфиги на стадии билда. Вынесите настройки в web.config, в стандартные секции ConnectionStrings и AppSettings. Они должны быть там по умолчанию, но вдруг вы храните из где-то в другом месте. В портале Azure, в секции Application settings для своего приложения - задайте реальные значения для своего приложения. Значения из Application settings применяются поверх того, что вписано в web.config, так что вам вообще ничего не придется заменять в процессе сборки и публикации релиза. Официальная документация по настройкам: Configure web apps in Azure App Service. App settings: For .NET apps, these settings are injected into your .NET configuration AppSettings at runtime, overriding existing settings. Connection strings: For .NET apps, these connection strings are injected into your .NET configuration connectionStrings settings at runtime, overriding existing entries where the key equals the linked database name. Кстати, Azure Web Sites умеют автопубликацию из GIT / VSTS, со встроенной поддержкой основных типов студийных проектов, так что может быть вам вообще не нужны билды в VSTS :)

суббота, 6 июля 2019 г.

Как понять, почему не отвечают сервисы/почему сервер не доступен?

Периодически без всяких причин может заглючить сервер. Два типа глюков:
1) Машина в принципе перестаёт отвечать. Запросы не идут к ней. По ssh не зайти.
2) На машину зайти можно зайти, но она тупит. К примеру, сервисы вроде запущены, но работать с ними не получаются. Тот же redis или consul. В процессах висят, но при попытке выполнить любой cli запрос, он тупо виснет. Даже операция find подвисает. nginx проксирует некоторые запросы к nodejs сервисам. Они тоже отваливаются по таймауту. Лимиты на серверах большие (ulimit, ограничение на сокеты и т.п.).
CPU не жрётся, на диске место есть, оперативки хватает. После ребута машины, логично, что всё ок.
Все виртуалки с Ubuntu 16.04.4 LTS
В какую сторону копать и что смотреть, если это снова случится?
Я не разбираюсь в iptables, но я сохранил список во время проблемы и после:
Когда присутствует проблема, то есть такие правила:
Chain RESET (0 references) pkts bytes target prot opt in out source destination 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with tcp-reset
Chain PROHIBIT (0 references) pkts bytes target prot opt in out source destination 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Они могут быть причиной? Если да, то как найти виновника? Единственное, что я нашёл в логах:
Jul 15 06:25:01 journey-test python3[1090]: 2018/07/15 06:25:01.935420 INFO Successfully added Azure fabric firewall rules Jul 15 06:25:01 journey-test python3[1090]: 2018/07/15 06:25:01.963119 INFO Firewall rules: Jul 15 06:25:01 journey-test python3[1090]: Chain INPUT (policy ACCEPT 0 packets, 0 bytes) Jul 15 06:25:01 journey-test python3[1090]: pkts bytes target prot opt in out source destination Jul 15 06:25:01 journey-test python3[1090]: Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) Jul 15 06:25:01 journey-test python3[1090]: pkts bytes target prot opt in out source destination Jul 15 06:25:01 journey-test python3[1090]: Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) Jul 15 06:25:01 journey-test python3[1090]: pkts bytes target prot opt in out source destination Jul 15 06:25:01 journey-test python3[1090]: 0 0 ACCEPT tcp -- * * 0.0.0.0/0 168.63.129.16 owner UID match 0 Jul 15 06:25:01 journey-test python3[1090]: 0 0 ACCEPT tcp -- * * 0.0.0.0/0 168.63.129.16 ctstate INVALID,NEW
UPD: в /etc/waagent.conf нашёл OS.EnableFirewall=y. На старых виртуалках, где всё норм, такого правила нет. На всех новых виртуалках есть. Azure поменял дефолтное поведение своего агента. Сейчас он может менять правила фаервола. Не знаю, может ли это быть причиной.


Ответ

На серваках крутится Азуровский WALinuxAgent. Я заметил в логах, что он зачем-то лезет править фаервол. С каких-то пор они поменяли дефолтное поведение агента. Это я случайно заметил сравнив /etc/waagent.conf на старых машинах и на новых. Там теперь OS.EnableFirewall=y, он теперь может править фаервол. Я использую apf для настройки доступа. В какой-то момент у них возник конфликт. После установки в false этого флага OS.EnableFirewall=n проблема больше не повторяется.
Небольшое дополнение. Вероятно, при поднятии новой машины я забыл убрать basic настройки фаервола.

Как следствие, их агент, вероятно, переопределял мои настройки в apf и ломали доступ по ssh и т.п.

вторник, 7 мая 2019 г.

Как удалить много записей из базы данных [закрыт]

Простое удаление работает очень долго (около 40 секунд из одной таблицы, в которой примерно 1,5 миллиона записей), нужно сделать быстрее (нужно удалить все данные пользователя). База MSSQL.


Ответ

Если нужно удалить ВСЕ записи из некоторой таблицы, используйте TRUNCATE, предварительно удалив внешние ключи, которые ссылаются на таблицу. Это самый быстрый способ. Он, в частности, игнорирует триггеры.
Если просто большое количество, то нужно удалять пачками. Оптимизировал я job, который удалял устаревшие данные, порядка ~100млн. строк в неделю. запускался на выходных. Опытным путём пришёл к выводу, что быстрее всего строки удаляется пачками по 100-500 штук.
Создаём временную табличку с ID'ами записей которые будем удалять. Пишем туда 100-500 ID'ов. и вызываем:
DELETE T2 FROM #Table T1 INNER LOOP JOIN Table T2 ON T1.ID = T2.ID
Здесь нужен именно LOOP. Хотя сервер скорее всего и без хинтов догадается. Вместо ID таблицы Table, может быть любой уникальный ключ. В случае, если ключ кластерный, то в таблицу #Table желательно вставлять ID'ы пачек строк, которые записаны в Table "рядом".
Если целиком пачку удалить не удалось, вызываем удаление по одной записи и логируем результаты.(ну я так делал:)) потом утром анализируем.
UPD: по поводу быстрого поиска удаляемых записей. Стоит создать индекс по UserId и посмотреть станет лучше или нет.
UPD: чуть-чуть про то, почему именно пачками.
Удаление по одной записи - это N транзакций. Выполняется довольно медленно... Таким был job до того, как я начал его оптимизировать. Пытаться удалить одним DML оператором ~1млн строк тоже плохо. Т.к. сама транзакция становится очень большой и рискуем получить нехватку памяти. Да и выполняется это долго.
В итоге задавая размер пачки, я к каждой таблице подобрал оптимальное число одновременно удаляемых записей. Начальник был доволен(с) :)

пятница, 9 ноября 2018 г.

Как бесплатно попробовать azure?

Хочу начать работать с Azure, слышал что есть бесплатные способы это сделать.


Ответ

Дополню ответ Mikhail Vaysman:
При регистрации нового аккаунта дается 12500 рублей (эквивалент 200$, если Вы из России) на 30 дней
Внимание: для регистрации необходимо указывать номер телефона и номер банковской карты с не 0 балансом, т.к. Microsoft делает тестовое списание небольшой суммы (не более 30 рублей) и ее возврат через некоторое время.

Если данного времени не достаточно для тестирования всех возможностей сервиса, можно воспользоваться программой поддержки разработчиков от Microsoft Visual Studio Dev Essentials которая дополнительно предоставит 1600 рублей (25$) ежемесячно в течение года

Если у вас уже есть идея проекта, который хочется реализовать на платформе azure - можно попробовать воспользоваться программой спонсорской поддержки стартапов от Microsoft Bizspark, по данной программе каждому участнику стартапа будет предоставлено 9600 рублей (150$) в месяц для использования облачных сервисов в своей разработке, программа рассчитана максимум на 5 участников, длительность - 1 год.

понедельник, 29 октября 2018 г.

Настройка CI/CD для публикации приложения в Azure

Хочу использовать Visual Studio Team Services для сборки и публикации своего ASP.NET приложения в Azure Web Application. Раньше публиковал с помощью Web Deploy в Visual Studio, и там мой профиль публикации содержал следующие данные:
Строка подключение к базе SQL Azure Параметры для включения аутентификации в Azure AD
Теперь же, когда публикация происходит с помощью CI/CD конвейера, эти параметры не подставляются и приложение публикуется в облако со строкой подключения и параметрами, которые были на локальной машине.
Вопрос: есть ли способ внести в Build Definition эти настройки? Импортировать профиль публикации при развертывании или еще какие-либо способы корректно развернуть приложение в облаке?


Ответ

Если вы публикуете приложение именно как Azure Web Application, то вам не нужно править конфиги на стадии билда.
Вынесите настройки в web.config, в стандартные секции ConnectionStrings и AppSettings. Они должны быть там по умолчанию, но вдруг вы храните из где-то в другом месте. В портале Azure, в секции Application settings для своего приложения - задайте реальные значения для своего приложения.

Значения из Application settings применяются поверх того, что вписано в web.config, так что вам вообще ничего не придется заменять в процессе сборки и публикации релиза.
Официальная документация по настройкам: Configure web apps in Azure App Service
App settings:
For .NET apps, these settings are injected into your .NET configuration AppSettings at runtime, overriding existing settings.
Connection strings:
For .NET apps, these connection strings are injected into your .NET configuration connectionStrings settings at runtime, overriding existing entries where the key equals the linked database name.

Кстати, Azure Web Sites умеют автопубликацию из GIT / VSTS, со встроенной поддержкой основных типов студийных проектов, так что может быть вам вообще не нужны билды в VSTS :)