Как предсказать переломные моменты MySQL?

Ознакомьтесь с общим шаблоном обновления

var paths = svg.selectAll('path')
  .data(pathsData)

var pathsEnter = paths.enter()
  .append('path')
  .attr("class", "line") 
  .attr('d', line)

Редактировать

На основе фотографии, которой вы поделились в комментариях

[1121 ]

  • вычисляют уникальный массив всех значений service. (в вашем примере это будет [4, 8], но оно будет управляться данными.)

  • Затем используйте этот массив в качестве данных для группы service lines.

  • Расположите каждую строку в соответствии с вашим yScale.

  • Бонус: создайте цветовую шкалу для динамического определения цвета обводки линии на основе ее значения в массиве значений обслуживания.

    • const data = [{service: 4, otherData: '...'},{service: 4, otherData: '...'},{service: 8, otherData: '...'},{service: 8, otherData: '...'},{service: 12, otherData: '...'},{service: 12, otherData: '...'}
      ]
      
      // Get a unique array from data
      const serviceData = Array.from(new Set(data.map(a => a.service)));
      
      // create a color scale if you need
      const color = d3.scaleLinear().domain(serviceData).interpolate(d3.interpolateHcl).range([d3.rgb("#ff0000"), d3.rgb('#257c00')]);
      
      const width = 500;
      const height = 300;
      const svg = d3.select('body').append('svg').attr('width', width).attr('height', height)
      
      // Bind to data
      const lines = svg.append('g').attr("class", "service-lines-group").selectAll('line')
        .data(serviceData)
      
      // Enter selection - create lines for each data point
      const linesEnter = lines.enter()
        .append('line')
        .attr("class", "service-line")
        .attr('x1', 0)
        .attr('x2', width)
        .attr('y1', d => d * 10)
        .attr('y2', d => d * 10)
        .attr('stroke', (d, i) => {
          return color(d)
        })

    7
    задан 17 February 2009 в 21:35
    поделиться

    4 ответа

    MySQL Performance Blog является фантастическим ресурсом. А именно, это сообщение касается основ надлежащей настройки InnoDB-определенных параметров.

    Я также нашел что версия PDF MySQL Reference Manual быть важным. Глава 7 касается общей оптимизации, и разделите 7,5 покрытий определенная для сервера оптимизация, с которой можно играть.

    От звука Вашего сервера кэш запроса может иметь ОГРОМНУЮ ценность для Вас.

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

    Это может стоить Вашего времени для изучения мультиосновной репликации, разрешение Вам заблокировать один сервер полностью и работать ОПТИМИЗИРУЕТ/АНАЛИЗИРУЕТ, не получая удар производительности (поскольку 95% Ваших запросов являются чтениями, другой сервер мог управлять записями очень хорошо).

    Раздел 12.5.2.5 покрытия ОПТИМИЗИРУЮТ ТАБЛИЦУ подробно и 12.5.2.1 покрытия, АНАЛИЗИРУЕТ ТАБЛИЦУ подробно.

    Обновите для своих редактирований/акцента:

    На вопрос № 2 легко ответить. Из справочника:

    ОПТИМИЗИРУЙТЕ:

    ОПТИМИЗИРУЙТЕ ТАБЛИЦУ, должен использоваться, если Вы удалили значительную часть таблицы или если Вы внесли много изменений в таблицу со строками переменной длины. [...] можно использовать, ОПТИМИЗИРУЮТ ТАБЛИЦУ, чтобы освободить неиспользуемое пространство и дефрагментировать таблицу данных.

    И ПРОАНАЛИЗИРУЙТЕ:

    ПРОАНАЛИЗИРУЙТЕ TABLE, анализирует и хранит ключевое распределение для таблицы. [...] MySQL использует сохраненное ключевое распределение для решения порядка, в котором к таблицам нужно присоединиться при выполнении соединения на чем-то другом, чем константа. Кроме того, ключевые дистрибутивы могут использоваться при решении который индексы использовать для определенной таблицы в запросе.

    ОПТИМИЗИРУЙТЕ хорошо для выполнения, когда у Вас есть свободное время. MySQL оптимизирует хорошо вокруг удаленных строк, но если Вы идете и удаляете 20 ГБ данных из таблицы, это может быть хорошая идея выполнить это. Это определенно не требуется для хорошей производительности в большинстве случаев.

    ПРОАНАЛИЗИРУЙТЕ намного более очень важно. Как отмечено, имение необходимых доступных данных таблицы к MySQL (обеспеченный АНАЛИЗИРУЮТ) очень важно когда дело доходит до в значительной степени любого запроса. Это - что-то, что должно быть выполнено на общей основе.

    Вопросом № 1 является немного больше приема. Я наблюдал бы сервер очень тщательно, когда это происходит, а именно, диск ввод-вывод. Моя ставка была бы то, что Ваш сервер перегружает или Вашу подкачку или кэши (InnoDB). Или в случае, это может быть запрос, настройка или в связанная загрузка. Неоптимизированные таблицы могли вызвать это. Как упомянуто, выполнение АНАЛИЗИРУЮТ, может очень помочь производительности и вероятно выручит также.

    7
    ответ дан 7 December 2019 в 05:30
    поделиться

    Я не нашел хорошего способа предсказать MySQL "переломные моменты" - и я столкнулся с некоторыми.

    Однако я нашел, что переломные моменты связаны с размером таблицы. Но не просто необработанный размер таблицы, скорее насколько большой "сфера интересов" к запросу. Например, в таблице более чем 3 миллионов строк и приблизительно 40 столбцов, приблизительно целых чисел трех четвертей, большинство запросов, которые легко выбрали бы часть их на основе индексов, быстро. Однако, когда одно значение в запросе на одном индексированном столбце означает, что две трети строк теперь "интересны", запрос теперь приблизительно на 5 времен медленнее, чем нормальный. Урок: попытайтесь расположить свои данные, таким образом, такое сканирование не необходимо.

    Однако такое поведение теперь дает Вам размер для поиска. Этот размер будет в большой степени иждивенцем на Вашей установке сервера, серверных переменных MySQL и схеме таблицы и данных.

    Точно так же я видел запросы создания отчетов, выполненные в разумный срок (~45 секунд), если период составляет две недели, но возьмите полчаса, если период расширяется на четыре недели.

    1
    ответ дан 7 December 2019 в 05:30
    поделиться

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

    Для строго ограниченных во времени запросов это иногда лучше для сохранения стабильности плана при помощи подсказок.

    0
    ответ дан 7 December 2019 в 05:30
    поделиться

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

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

    Если Вы не делаете, та Ваша вторая опция состоит в том, чтобы постоянно контролировать журнал медленного запроса и затем идти, бьет разработчиков; я имею в виду, идут, добавляет индекс.

    Существует опция позволить регистрироваться запросов, которые не использовали индекс, который будет полезен для Вас.

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

    Для вопроса № 2 - На InnoDB "анализируют таблицу", в основном свободно работать, поэтому если у Вас есть плохая производительность соединения, не повреждает выполнять его. Если баланс ключей в таблице не изменится много, это вряд ли поможет все же. Это почти всегда сводится к плохим запросам. "оптимизируйте таблицу", восстанавливает таблицу InnoDB; по моему опыту, относительно редко, чтобы это помогло достаточно для ценности стычки наличия таблицы, недоступной в течение какого-то времени (или выполнение основного основного материала обработки отказа, в то время как это работает).

    0
    ответ дан 7 December 2019 в 05:30
    поделиться
    Другие вопросы по тегам:

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