![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 157 Pomógł: 1 Dołączył: 27.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Mam limit 30 zapytań do bazy. Aktualizuję w bazie ceny opisy itp. Wszystko wykonuje się w pętli dla około 15 tys pozycji. Poniżej zapytania, które generuje skrypt. Niestety za każdym razem serwer blokuje mi połączenie przy około 3 tysięcznej pozycji tracąc połączenie z bazą. Czy jest możliwość jakiegoś zoptymalizowania tych zapytań, aby skrypt nie obciążał tak bazy? Swoją drogą ciężko mi pojąć funkcjonowanie tych maksymalnych 30 zapytań do bazy, aby to omijać jakoś logicznie licząc.
|
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
30 zapytań ale co? na sekundę, minutę? a może 30 połączeń do BD... mało precyzyjne sformułowanie
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 879 Pomógł: 230 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) ![]() ![]() |
poczytaj o multi_query() ale działa tylko dla mySQLi, będziesz mógł w jednym zapytaniu wykonać wiele innych, dzięki czemu będziesz mógł zmniejszyć ilośc zapytań. Ja np. na stronie mojego sklepu wykonuje 13-16 zapytań.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 22 Dołączył: 17.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
To są tylko update czy jakieś selekty też?
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
poczytaj o multi_query() ale działa tylko dla mySQLi, będziesz mógł w jednym zapytaniu wykonać wiele innych, dzięki czemu będziesz mógł zmniejszyć ilośc zapytań. Ja np. na stronie mojego sklepu wykonuje 13-16 zapytań. Jesli wysle je przez multi_query, to wcale nie zmniejszy ilosci zapytan, bo wysle ich tyle samo. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 879 Pomógł: 230 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) ![]() ![]() |
Masz rację, ale nie sprecyzowałem, chodzi o ilość wywołań query.
Jeżeli masz takie limity są dwa rozwiązania: - zmienić hosting - stosowanie aktualizacji sekwencyjnej czyli wykonywanie aktualizacji co 2000 pozycji np. co 5 minut. Ten post edytował Tomplus 24.11.2015, 09:00:26 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 157 Pomógł: 1 Dołączył: 27.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
faktycznie multi_query() daje chyba ten sam efekt. Co masz na myśli wspominając aktualizację sekwencyjną? nie chciałbym ręcznie tego robić tylko ewentualnie jakoś wprowadzić sekwencje przez skrypt. Myslałem też o
i nawet ją zastosowałem, aby np. przy 1000 2000 3000 produkcie skrypt się zatrzymał, ale co z tego jak np. przerwało mi na 2333. Nie wiem też jak sprawa wygląda jeśli chodzi o wstawanie takiego serwera MYSQL bo mam wykupiony prywatny serwer + oferta Performance 1 w OVH Ilość jednoczesnych połączeń do bazy 30 i nie wie czy to jest na sekundę czy jak ponieważ nie widze tego wskazania. Ustawiłem serwer mysql max_connections = 200. To też nic nie dało. Wskażcie co byście w tej sytuacji zrobili. Zmiana hostingu nie wchodzi w grę. Rozumiem, że jeśli wszystkie zapytania są mi potrzebne nie ma innej możliwości ograniczenia ich bo skrypt i tak musi się z bazą połączyć i pobrać to co potrzebuję tym bardziej, że wszystko jest w innych tabelach. To są tylko update czy jakieś selekty też? 2 selekty |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 22 Dołączył: 17.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
No to jak są selekty to nie rób pętli tylko join i po sprawie.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 157 Pomógł: 1 Dołączył: 27.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 22 Dołączył: 17.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Wklej tutaj cały kod to zobaczymy co tam masz.
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 60 Pomógł: 10 Dołączył: 17.11.2011 Ostrzeżenie: (0%) ![]() ![]() |
@viking dobrze radzi, ewentualnie upchną bym wszystko w procedurze i ją wywołał, a następnie sprawdził czy mi to wpada na limit jako jedno wywołanie zapytania do bazy.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 13:24 |