Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomoc w doborze serwera
Forum PHP.pl > Inne > Hydepark
jbadyl
Witam, mam pewien problem strona która posiadam w tej chwili hostowana w home.pl linia ekonomiczna (ale hosting w lini biznesowej tez nic nie zmienia) smile.gif zaczyna działać bardzo wolno problemem są zapytania do bazy danych.
Nie mam możliwości szybkiego zoptymalizowania zapytań ze względu na użycie gotowego rozwiązania nieszczęśliwie połączonego z rozwiązaniem autorskim.

Strona ma około 100 000 odsłon miesięcznie, baza mysql zajmuje około 25 mb, średnio w każdej z tabel jest około 3k rekordów w 4 po 15k, sporo indeksów. A większość zapytań tego gotowego rozwiązania użytego w serwisie podczas jednego zapytania łączy za pomocą join co najmniej 5 - 8 tabel i robi z nimi dziwne rzeczy.
Jakich rozmiarów serwer polecacie żeby strona działał to sprawnie, stabilnie, szybko a ja nie poszedł z torbami, czy wystarczający był by już jakiś VPS ( z odpwiednią konfiguracją mysqla zeby sobie wszystko ładnie w pamięci trzymał bo baza nie jest jakaś specjalnie ogromna) czy moze jestem w błędzie ?

Co jest minimalną granicą tak poniżej której nie powinienem schodzić jeżeli chodzi o specyfikacje serwera ?

JB.
redeemer
Przy takiej bazie serwis powinien śmigać. Dodaj może cacheowanie wyników zapytań w warstwie aplikacji?
jbadyl
Nie wydaje mi się to dobrym pomysłem, znaczy jest ale na dla mojego przypadku chyba nie bardzo ponieważ masa rzeczy jest sortowana, grupowana itd a dodanie jednego elementu w tabeli spowoduje i tak konieczność odświeżenia cache przy takiej ilości odwiedzin bo średnio co drugi odwiedzający powoduje zmianę w bazie która wymagała by odświeżania cache

Poza tym nie widzę tam jakiejś prostej możliwości wpięcia się w istniejące funkcje więc to by była duża przeróbka która nie ma sensu gdyż za kilka miesięcy i tak większość najprawdopodobniej będzie pisana od nowa.
!*!
Z tego co opisałeś, toć to maleństwo i powinno działać bezproblemowo. Spróbuj podpiąć cache, aby chociażby sprawdzić czy działa lepiej, jeśli nie, winy szukałbym gdzie indziej, chociażby po stronie home.pl , i nie ma co tu gdybać.
athabus
Wg. mnie przy takiej stronie, tj realtywnie mały ruch, ale cieżki skrypt powinieneś celować w jakiś dobry jakościowo hosting typu kei.pl - oni mają dobre maszyny i stosują mały overselling, przez co nawet ciężkie skrypty chodza bardzo sprawnie. Przykładowo skrypt na kei.pl chodził mi zdecydowanie szybciej niż na dość mocnym vps'ie w budżetowej firmie.

Minusem jest to, że w takich firmach z reguły stosują bardzo rygorystyczne obwarowania co do obciążenia - z jednej strony to plus, bo wykluczają z hostingu osoby zarzynające sprzęt i skrypty chodzą szybko, z drugiej strony oczywiście jak to Ty jesteś wysysaczem zasobów to masz problem ;-)

Jeśli to nie pomoże to pomyśl o vps - znowu raczej odpuść sobie budżetowe rozwiązania, bo one nie zdadzą egzaminu na dłuższa metę. Ja sam korzystam z vps w firmie iq.pl i moge o nich powiedziec bardzo dużo dobrego. Fak, że płacę z jakieś 50-70% drożej niż w firmach budżetowych, ale skok jakościowy w stosunku do niby takiej samej konfiguracji w firmie budżetowej jest ogromny. Przykładowo mam taką akcję w panelu admina, która średnio u nich zajmuje mi ~2s, a w budżetowej konkurencji na bardzo podobnej konfiguracji było to ~6s.

Reasumując przy takich uwarunkowaniach jak masz patrzyłbym na coś renomowanego, gdzie zagwarantują ci mały overselling usłgu, dużo pamięci/procesora na maszynie matce i szybkie dyski sas lub ssd najlepiej w macierzy raid 10. Ewentualnie jeśli masz ograniczony budżet to to szukaj czegoś w de lub uk.
jbadyl
Dostałem slow logi, i niektóre rzeczy trwają sporo ale od strony bazy danych nie mam tego jak ugryźć bo z indeksami przesadzać nie ma sensu bo to może zaszkodzić. Wg pomocy technicznej z hostingiem jest wszystko ok.


Przykładowe zapytanie,

  1. SELECT offers.id, items.name, items.description AS description, items.userId, users.name AS userName, users.city AS city, users.countryId AS country, countries.name AS countryName, winnerUsers.name AS winnerName, startDate, endDate, type, url AS imageURL, smallUrl AS imageSmall, oc.categoryId AS categoryId, offers.currentPrice, offers.active, offers.winner, offers.draft, offers.inWebstore,offers.views,offers.startPrice,offers.adult,offers.shipConditions,gs_users.user_photo, tags.tag_id, youtubeVideo, votes, points, rating FROM sklep_offers offers LEFT JOIN sklep_items items ON items.id=itemId LEFT JOIN sklep_users users ON users.id=items.userId LEFT JOIN sklep_images images ON images.id=imageId LEFT JOIN sklep_offers_categories oc ON oc.offerId=offers.id LEFT JOIN sklep_users winnerUsers ON winnerUsers.id=offers.winner LEFT JOIN sklep_countries countries ON users.countryId=countries.id LEFT JOIN `tag_work` tags ON tags.id_work = items.id_work_fk LEFT JOIN users gs_users ON users.id_user_fk=gs_users.id_user WHERE (currentPrice BETWEEN 0 AND 1000000000 AND offers.active=1 AND offers.draft=False) OR (offers.draft=False AND offers.type="STANDARD" ) GROUP BY offers.id ORDER BY offers.views DESC


jedno z najcięższych zapytań SQL wg logów które dostałem najdłużej 5 sekund, średnio koło 3 sekund trwa jego wykonanie wykonanie, i teraz jak to ruszyć skoro jego wynik jest zależny od ilości wyświetleń elementów na stronie plus stronnicowanie poprzez limit, wiec przy ponownym wywołaniu w zupełności wystarcza cache MySQL w takim krótkim okresie czasu.

Chociaż może ktoś z was widzi jak to lepiej zrobić ?

Wracając do VPS najlepiej taki który pozwolił by mi bez zbędnych przenosin na zwiększanie parametrów coś jak w chmurze, jednak taniej niż w e24cloud,
athabus
Jeśli chodzi o vps to chyba większość dostawców umożliwia coś takiego. W iq na pewno jest taka opcja, bo sam kiedyś ich o to pytałem. Problem pojawia się dopiero przy migracji na dedyka.
scanner
Cytat(jbadyl @ 11.08.2012, 18:37:20 ) *
Przykładowe zapytanie,
  1. SELECT offers.id, items.name, items.description AS description, items.userId, users.name AS userName, users.city AS city, users.countryId AS country, countries.name AS countryName, winnerUsers.name AS winnerName, startDate, endDate, type, url AS imageURL, smallUrl AS imageSmall, oc.categoryId AS categoryId, offers.currentPrice, offers.active, offers.winner, offers.draft, offers.inWebstore,offers.views,offers.startPrice,offers.adult,offers.shipConditions,gs_users.user_photo, tags.tag_id, youtubeVideo, votes, points, rating FROM sklep_offers offers LEFT JOIN sklep_items items ON items.id=itemId LEFT JOIN sklep_users users ON users.id=items.userId LEFT JOIN sklep_images images ON images.id=imageId LEFT JOIN sklep_offers_categories oc ON oc.offerId=offers.id LEFT JOIN sklep_users winnerUsers ON winnerUsers.id=offers.winner LEFT JOIN sklep_countries countries ON users.countryId=countries.id LEFT JOIN `tag_work` tags ON tags.id_work = items.id_work_fk LEFT JOIN users gs_users ON users.id_user_fk=gs_users.id_user WHERE (currentPrice BETWEEN 0 AND 1000000000 AND offers.active=1 AND offers.draft=False) OR (offers.draft=False AND offers.type="STANDARD" ) GROUP BY offers.id ORDER BY offers.views DESC

Zrób sobie EXPLAIN tego zapytania - masz tu 8 (OSIEM) leftjoinów - naprawdę nie możesz tego rozbić na osobne zapytania czy użyć podzapytań?
jbadyl
Zrobilem sobie explain może czegoś nie widze w tym co on zwraca:


Wiem ze najlepsze było by przepisanie całego serwisu jednak to wymaga czasu, cos tam probuje w tych zapytaniach zmieniać jezeli wiem ze nic mi sie nie posypie z tego powodu ale niestety nie przynosi to wymiernego efektu.


UPDATE:

Być może przyczyną albo jedną z przyczyn błędna reguła dla mod_rewrite, pomimo zwracania tego co powinna czyli obrazka, wykonywało się również zapytanie do skryptu php, sam skrypt wykonywał sporo zapytań wiec podczas jednego załadowania strony wykonywane było dodatkowe kilkanaście jego wywołań ponownie.
Serwer bazy danych miał prawo się zakleszczyć z taką ilością joinów.

Dodatkowo ktoś miał fantazję aby wyświetlić kilka pozycji na stronie są pobierane wszystkie rekordy i po stronie robiona jest ich filtracja, dziękuje za pomoc, chyba do czasu przepisania całości uda mi się wszystko jakoś połatać i przyspieszyć.

Podepnę się jeszcze z pytaniem, czy jest coś na windowsa w działaniu podobne do siege ? bo nie chce mi się uruchamiac virtualboxa tylko po to.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.