Официальный сайт движения «Москва без Лужкова!»
Главная Новости Москвы Наши новости Популярное
  • Новости
  • Популярное
  • Новости
  • ВХОД В ЛИЧНЫЙ КАБИНЕТ
    логин
    пароль
       
    Новости

    Problem wysadzania tabel w bitrix

    1. Problem Blowup tabeli b_sale_fuser
    2. Jak szybko usunąć tabelę b_sale_fuser
    3. Problem z rozszerzeniem tabeli b_sale_viewed_product
    4. Jak szybko wyczyścić tabelę b_sale_viewed_product
    5. Problem wysadzenia tabeli b_event
    6. Jak szybko wyczyścić tabelę b_event

    Wszystkie opisane poniżej metody wykorzystano do rozwiązania wersji strony Bitrix.15.5.9.
    Nie zaleca się używania go w innych wersjach, ponieważ istnieje możliwość, że tabele i kod mogą mieć zmiany po aktualizacji.

    Problem Blowup tabeli b_sale_fuser

    Opuszczone kosze są przechowywane w tabeli.
    Domyślnie przechowywane przez 100 dni. Możesz zmienić okres przechowywania w module karty Sklep internetowy - Ustawienia - Zapisz koszyk (dni) Opuszczone kosze są przechowywane w tabeli
    Agent jest odpowiedzialny za czyszczenie. Na funkcji agenta:
    CSaleUser :: DeleteOldAgent (100, 0);
    Jeśli Twój sklep jest dość odwiedzany, może się zdarzyć, że agent nie będzie miał czasu na wyczyszczenie starych koszyków, w wyniku czego otrzymasz zawyżoną tabelę b_sale_fuser.

    Ręczne usuwanie wpisów w tabeli nie powinno być!

    Jak szybko usunąć tabelę b_sale_fuser

    Znajdź funkcję CSaleUser :: DeleteOldAgent () w modułach bitrix sale general file.php
    To z kolei jest opakowaniem dla funkcji CSaleUser :: DeleteOld () w modułach bitrix sale mysql plik basket.php
    Funkcja DeleteOld w kodzie źródłowym:

    funkcja DeleteOld ($ nDays) {global $ DB; $ nDays = IntVal ($ nDays); $ strSql = "SELECT f.ID". „FROM b_sale_fuser f”. „LEFT JOIN b_sale_order o ON (o.USER_ID = f.USER_ID)”. „GDZIE”. „TO_DAYS (f.DATE_UPDATE) <(TO_DAYS (NOW ()) -„. $ NDays. ”)”. „AND o.ID ma wartość null”. „AND f.USER_ID ma wartość NULL”. „LIMIT 300”; $ db_res = $ DB-> Zapytanie ($ strSql, false, "File:" .__ FILE__. "Line:" .__ LINE__); while ($ ar_res = $ db_res-> Fetch ()) {CSaleBasket :: DeleteAll ($ ar_res ["ID"], false); CSaleUser :: Delete ($ ar_res ["ID"]); } return true; }

    Po przeanalizowaniu kodu zobaczysz, że dane z tej tabeli są używane w innych tabelach systemu. Aby poprawnie usunąć rekordy z tabeli b_sale_fuser, musisz użyć 2 funkcji interfejsu API bitrix:
    CSaleBasket :: DeleteAll ();
    CSaleUser :: Delete ();

    Aby szybciej wyczyścić tabelę b_sale_fuser, możesz:

    • skopiuj kod funkcji DeleteOld;
    • zmień LIMIT 300 na LIMIT 1000 (lub nawet więcej, w zależności od tego, jak szybko chcesz go wyczyścić);
    • ustaw wartość zmiennej $ nDays na początku - prawidłowy okres przechowywania koszyka;
    • skopiowany kod można zawiesić na CRON.

    Problem z rozszerzeniem tabeli b_sale_viewed_product

    Ta tabela przechowuje zeskanowane produkty użytkownika.
    W ustawieniach modułu Sklepu internetowego można zmienić „Czas przechowywania przeglądanych towarów (dni)” i „Maksymalna ilość oglądanych towarów użytkownika”. Ta tabela przechowuje zeskanowane produkty użytkownika

    Funkcja w agencie CSaleViewedProduct :: ClearViewed () jest odpowiedzialna za wyczyszczenie tej tabeli, ale może nie poradzić sobie z dużą liczbą odwiedzających IM.

    Jak szybko wyczyścić tabelę b_sale_viewed_product

    Rekordy tej tabeli można usunąć kwerendą sql bezpośrednio w bazie danych.
    Pozwól mi wyjaśnić, dlaczego możemy to zrobić.

    Znajdźmy funkcję źródłową CSaleViewedProduct :: ClearViewed (), która jest dziedziczona z klasy nadrzędnej CAllSaleViewedProduct i znajduje się w pliku bitrix moduły.
    Ta funkcja jest opakowaniem dla CSaleViewedProduct :: _ ClearViewed ()
    Rozważ jego kod:

    funkcja publiczna _ClearViewed () {global $ DB; $ oglądany_czas = COption :: GetOptionString („sprzedaż”, „przeglądane_czas”, „90”); $ seen_time = IntVal ($ seen_time); $ strSql = "DELETE". „Z B_sale_viewed_product”. „WHERE TO_DAYS (DATE_VISIT) <(TO_DAYS (NOW ()) -„. $ Viewed_time. ”) LIMIT 1000”; $ db_res = $ DB-> Zapytanie ($ strSql, false, "File:" .__ FILE__. "Line:" .__ LINE__); powrót prawda; }

    Jak widać, do bazy danych istnieje bezpośrednie żądanie usunięcia rekordów, tj. Brak danych w zależności od zapisów w tej tabeli.

    Problem wysadzenia tabeli b_event

    Zdarzenia systemowe są rejestrowane w tabeli.
    W module głównym na karcie „Dziennik zdarzeń” możesz zmienić wartość „Ile dni na przechowywanie zdarzeń” i które zdarzenia muszą być zapisane w tabeli. Zdarzenia systemowe są rejestrowane w tabeli

    Funkcja CEventLog :: CleanUpAgent () agenta usuwa tabelę.

    Jak szybko wyczyścić tabelę b_event

    Rekordy tej tabeli można usunąć kwerendą sql bezpośrednio w bazie danych.
    Pozwól mi wyjaśnić, dlaczego możemy to zrobić.
    Znajdźmy funkcję kodu źródłowego CEventLog :: CleanUpAgent (), znajduje się ona w pliku bitrix moduły main główne ogólne ogólne event_log.php
    Rozważ jego kod:

    funkcja CleanUpAgent () {global $ DB; $ cleanup_days = COption :: GetOptionInt ("main", "event_log_cleanup_days", 7); if ($ cleanup_days> 0) {$ arDate = localtime (time ()); $ date = mktime (0, 0, 0, $ arDate [4] +1, $ arDate [3] - $ cleanup_days, 1900 + $ arDate [5]); $ DB-> Zapytanie ("DELETE FROM b_event_log WHERE TIMESTAMP_X <=". $ DB-> CharToDateFunction (ConvertTimeStamp ($ date, "FULL")))); } return "CEventLog :: CleanUpAgent ();"; }

    Jak widać, do bazy danych istnieje bezpośrednie żądanie usunięcia rekordów, tj. Brak danych w zależności od zapisów w tej tabeli.


     

    Найди свой район!

    Восточный

    Западный

    Зеленоградский

    Северный

    Северо-Восточный

    Северо-Западный

    Центральный

    Юго-Восточный

    Юго-Западный

    Южный

    Поиск:      


     
    Rambler's Top100
    © 2007 Движение «Москва без Лужкова!»