Лучший инструмент настройки производительности MySQL? [закрыто]

Это мое решение:

public static class ObjectExtensions
{
    public static string ToQueryString(this object obj)
    {
        if (!obj.GetType().IsComplex())
        {
            return obj.ToString();
        }

        var values = obj
            .GetType()
            .GetProperties()
            .Where(o => o.GetValue(obj, null) != null);

        var result = new QueryString();

        foreach (var value in values)
        {
            if (!typeof(string).IsAssignableFrom(value.PropertyType) 
                && typeof(IEnumerable).IsAssignableFrom(value.PropertyType))
            {
                var items = value.GetValue(obj) as IList;
                if (items.Count > 0)
                {
                    for (int i = 0; i < items.Count; i++)
                    {
                        result = result.Add(value.Name, ToQueryString(items[i]));
                    }
                }
            }
            else if (value.PropertyType.IsComplex())
            {
                result = result.Add(value.Name, ToQueryString(value));
            }
            else
            {
                result = result.Add(value.Name, value.GetValue(obj).ToString());
            }
        }

        return result.Value;
    }

    private static bool IsComplex(this Type type)
    {
        var typeInfo = type.GetTypeInfo();
        if (typeInfo.IsGenericType && typeInfo.GetGenericTypeDefinition() == typeof(Nullable<>))
        {
            // nullable type, check if the nested type is simple.
            return IsComplex(typeInfo.GetGenericArguments()[0]);
        }
        return !(typeInfo.IsPrimitive
          || typeInfo.IsEnum
          || type.Equals(typeof(Guid))
          || type.Equals(typeof(string))
          || type.Equals(typeof(decimal)));
    }
}

Я использую это расширение для моего теста интеграции, он отлично работает:)

40
задан Arne Evertsson 12 December 2008 в 08:40
поделиться

3 ответа

Плохие новости: существуют инструменты GUI для помощи с этим, но это - квалифицированное и широкое задание. Таким образом, они не покрывают все, ее вероятное, необходимо будет использовать командную строку stuff/sql операторы и т.д. для помощи. Я только действительно использовал инструменты командной строки. Я дам что-то вроде обзора вещей, которые я знаю / используемый:

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

Удостоверяются, что MySQL Query Cache настраивается и работа, и дайте ему немного больше RAM, если Вы можете, и удостоверяться, что Ваши важные запросы не делают ничего, что предотвращает mysql кэширование их. Например, с помощью ТЕПЕРЬ () функция в запросах делает это - по очевидным причинам - ТЕПЕРЬ изменяется каждую секунду! Можно вместо этого поместить метку времени в sql и использовать время для ближайшей минуты/часа/дня (самый большой период, который можно сойти с рук) позволить mysql извлекать некоторую кэширующуюся пользу.

, Чтобы начать оптимизировать вещи: Липкий "ОБЪЯСНЯЮТ" перед выбором, способ видеть, как запрос выполняется и idetify, как улучшить его. Учитесь интерпретировать вывод: http://dev.mysql.com/doc/refman/5.0/en/using-explain.html Вы будете часто мочь добавить новый, индексирует/добавляет столбцы к существующим для улучшения вещей. Но Вы также встретитесь с временами, который запрашивает потребность, которая будет реструктурирована.

Начинающий улучшение производительности с MySQL (принимающий Вас уже не знают то, что проблемный запрос) должен проверить журнал медленного запроса - это регистрирует в файл все запросы, занимающие больше времени, чем x секунды.

Обзор, включая конфигурацию, для если не вход этого уже, здесь: http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html - я также нашел, что установка long_query_time к 0 в течение приблизительно одного дня, так, чтобы все запросы были зарегистрированы здесь с потраченным временем, является полезным способом понять точно, куда производительность идет. Но я не пошел бы туда сразу! И не оставляйте его на, журналы могут стать крупными.

, После того как у Вас есть несколько дней входа, я нашел mysqlsla (mysql медленный анализатор журнала) отсюда: http://hackmysql.com/mysqlsla является хорошим инструментом.

Это может сделать больше, чем просто анализ журнала медленного запроса - прочитал руководство. Но объяснить, что это делает для медленных журналов: журнал медленного запроса может содержать много данных, таким образом, может быть трудно выяснить, какие запросы являются самым дорогим полным - например: фактор в том, сколько раз они выполняют и когда два запроса являются на самом деле тем же с другим идентификатором в где пункт.

SLA MySQL делает это все для Вас. Это пробегает журнал и может сгруппировать запросы, которые являются теми же / различными значениями в где пункты. Это затем представляет Вас (по умолчанию) лучшие 10 запросов с точки зрения общего времени выполнения - который часто имеет некоторые неожиданности, но обычно является самой продуктивной начальной точкой - берут самый дорогой запрос, и использование ОБЪЯСНЯЮТ на нем и видят, можно ли улучшить его.

Некоторые запросы занимают много времени и не могут легко быть улучшены. В этом случае можно ли получить данные иначе или по крайней мере кэшировать ли их вместо этого? Можно даже найти, что изменение схемы DB требуется. Точно так же некоторые запросы могут быть во главе вывода mysqlsla, потому что Вы выполняете их много (особенно верный, если long_query_time установлен на 0), даже если они работают довольно быстрый. Возможно, время для добавления некоторого кэширования к приложению?

http://www.maatkit.org/ также обещание взглядов - никогда не использовало его, но mk-query-profiler инструмент должен быть полезен далее изучить, почему запросы замедляются.

А абсолютно отдельная вещь посмотреть на также: страница "состояния" в PHPMYADMIN (или можно выполнить все запросы для генерации этой информации....) - она выделяет вещи, она думает, могло бы быть плохим в красном и может помочь Вам видеть, где Вы могли бы извлечь пользу из выделения системных ресурсов. Я не знаю так много на этом - мой подход всегда состоял в том что, если что-то красно и выглядит плохо, чтобы пойти и читать об этом и решить если ее важное и должен ли я сделать что-то (обычно означает выделять больше ресурсов MySQL путем изменения конфигурации).

Недавно я нашел, что выполнение ПОКАЗЫВАЕТ, что PROCESSLIST может также быть полезным на сервере, который страдает. Пока это только дает Вам живой (хорошо, живой снимок) информация, это может помочь Вам получить ощущение того, что продолжается в установленный срок, особенно если Вы обновляетесь несколько раз и наблюдаете изменения. Я недавно определил сервер с помощью каждого доступного подключения mysql для выполнения идентичного запроса с помощью этого метода. Несомненно, это было бы в журнале медленного запроса, но это как действительно быстрый и очевидный способ видеть, что произошло.

74
ответ дан benlumley 12 December 2008 в 18:40
поделиться
  • 1
    Как примечание стороны, существует очень серьезное основание для различия между None и 'None'. Первые средства ' сделайте значение по умолчанию thing' более поздние средства " я don' t хотят color". – tacaswell 13 May 2014 в 00:34

ОБЪЯСНИТЕ Ваш друг. Кроме этого, необходимо полагаться на смесь специальных инструментов, тестирования и инструментов OS для наблюдения точно, что продолжается.

Много вещей видно эффективно или от инструментов OS (хороший для determing, является ли ситуацией ЦП или связанный IO), или различные переменные, которые видны в самом MySQL (покажите глобальные переменные, покажите механизм innodb состояние и т.д.).

я чувствую, что действительно важно иметь СРЕДУ ТЕСТА ПРОИЗВОДИТЕЛЬНОСТИ. Получите базу данных размера производства с подобной производству загрузкой (использующий моделирование загрузки) работающий на аппаратных средствах производственного класса в Вашей лаборатории (дорогой, но важный).

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

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

По существу, производительность, настраивающаяся обычно, смотрит на три области в этом порядке:

  • Структура Вашей базы данных самой (структура таблицы, индексы и т.д.)
  • Запросы
  • Настройка параметров сервера

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

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

6
ответ дан MarkR 12 December 2008 в 18:40
поделиться

Я обнаружил, что MONyog очень помогает, когда у меня страдает сервер mysql.

Это веб-система, которая анализирует вашу систему 24/7 и дает вам достойные предложения по лучшим значениям системных переменных, размеров кеша и т. Д.

Она также имеет встроенный анализатор медленных запросов типа mysqlsla.

Жаль, что это не бесплатно. MONyog screenshot: Current Connections

MONyog - MySQL Monitor and Advisor имеет новый пользовательский интерфейс, который мне очень нравится, мне больше всего нравятся эти функции:

  1. Поиск проблемного SQL - с помощью медленного журнала, общего журнала, PROCESSLIST и через PROXY
  2. Оповещение о критических условиях например - Сервер не работает, слишком много соединений и т. д.
  3. Периодически отслеживайте результаты собственных запросов
  4. Мониторинг репликации

    и т. д. Полный список функций

3
ответ дан 27 November 2019 в 00:29
поделиться
Другие вопросы по тегам:

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