юли 242009
 

Преди 3 дни зададох на учтивите блогочитетели един статистически въпрос. Това, че получих отговори, при това то доста (като за моя блог), ме кара да се чувствам задължен да споделя решението, до което достигнах. Естествено, не мога да претендирам, че е перфектно (или окончателно). Но успях да се вслушам в препоръките и да измисля начин на извличане, при който:
– извличам данните за произволен период (в случая – 90 дни)
– от множеството премахвам всички наблюдения, чиито стойности са под 11% или над 89% (това има още да се доработва, в момента не се държи добре при много еднакви стойности)
– взимам медиана и средно отклонение, с които да правя сравнение на текущата стойност. Не съм намерил начин да взема лесно очакваната стойност (expected value), за това разчитам на медианата
– имам голям контрол върху периодите, за които извършвам наблюденията: примерно мога да премахна уикендите, наблюдавам само за опредени часове и т.н. (това го правя с pl/sql, иначе заявката става твърде брадата)

Както се досещате, смятам с такава заявка да следя определен процес в работата си. В момента тествам решението, за да уточня параметрите. Но за сега се получи нещо такова:

select sum(decode(period, 0, rec_cnt, 0)) Current_records,
       median(case
                 when rec_rank < 0.11 then
                  null
                 when rec_rank > 0.89 then
                  null
                 else
                  rec_cnt
               end) Records_median,
       stddev(case
                 when rec_rank < 0.11 then
                  null
                 when rec_rank > 0.89 then
                  null
                 else
                  rec_cnt
               end) Records_deviation,
  from (select percent_rank() over(order by rec_cnt) rec_rank, rec_cnt, period
           from (select get_sum_period_hrs(input_time) period, sum(people_count) rec_cnt
                    from input_stats
                   where input_time > sysdate - 90
                   group by get_sum_period_hrs(input_time))
          where period >= 0)

Това работи с таблица, в която имам статистика за наблюдаваните стойности, която се попълва на произволен кратък интервал (няколко минути). Ако използвам аналогията от предния пост, в таблицата имам колонка input_time (кога е направен текущия запис) и people_count (колко души са влезли след последния запис). Имам функция get_sum_period_hrs, която ми връща 0 за текущия период, >0 за предишен период на наблюдение и <0 за записи, които са извън желаните от мен периоди на наблюдение.

Не смятам това решение за съвършено или дори за добър пример, но се чувствам длъжен да споделя резултата след като получих толкова помощ от вас 🙂

 Posted by at 9:50

Oracle RAC rolling patchset installation

 Без категория  Коментарите са изключени за Oracle RAC rolling patchset installation
юли 242009
 

Колкото и невероятно да звучи, това нещо е не само възможно, ами и доста лесно. Снощи направихме zero downtime rolling patch на един клъстер от 10.2.0.2 на 10.2.0.4 (само на CRS). Необходимите стъпки са описани в Metalink Note 338706.1 и наистина работят 🙂

Напомням, че който иска да прави rolling upgrade на CRS от 10g на 11g, може да погледне тази статия на Jason Arneil.

 Posted by at 9:17