Przyspieszenie bazy danych

0

Panowie,

Ostatnimi czasy zarządzam dość sporą bazą danych.
Baza MySql.
Pewne tabele są co najmniej kilkakrotnie dziennie uaktualniane.
Czas tego aktualizacji jest coraz bardziej dłuższy.

Aktualizacje wykonują się przez skrypty php.
Problem aktualizacji powoduje ,że skrypty w pewnym momęcie nie mogą się do końca wykonać.

Czytałem kiedyś że jeżeli zapytania wykonują się bardzo długo można wykonać jaką operacje na tabelach które powinny przyspieszyć zapytanie.

Czy wiecie może jaką to operacje można wykonać na tabeli aby przyspieszyć zapytania?

0

O fajny temat! Mamy okazję sobie po zgadywać, ponieważ autor opisał problem najbardziej ogólnie jak się dało. Pewnie łudzi się, że na 4programmers siedzą wróżki, które mu wywróżą dlaczego 'wolno działa' :)

Używasz indeksów?

0

Może chodziło Ci o dodanie indeksów do kolumn po których wyszukujesz ?:) To chyba najczęstszy sposób optymalizacji dla MySQL

0

No to precyzuje moze zapytanie:
NIektóre tabele mają system składowania MyISAM a niektóre w InnoDB.
Indeksów nie ma pozakładanych.

Przeprowadziłem sobie niedawno test zrobiłem kopie całej bazy i przeniosłem na inny komputer.
Wykonałem aktualizację (skrypty php ) całość poszła w miarę szybko i nic się nie wysypało.

Tylko na serwerze coś się dzieje nie tak.

Specjalistą nie jestem i nie jestem pewny czy

  1. Powinienem zmienić mechanizm składowania z MyISAM na InnoDB wszystkich tabel.
  2. Nie wiem czy może REPAIR TABLE pomoże?
0

Podaj przyklad zapytania, ktore jest dlugie. Postaraj sie ocenic czy wiekszy wklad w czas wykonania ma update czy select definiujacy dane aktualizowane. Jesli indeksow nie ma to generalnie update wykonuje sie szybciej, select wolniej. Generalnie - znaczy bez szczegolow to tez zgadywanie.

0

Indeksów nie ma pozakładanych.

Kolejny twór "doświadczonych specjalistów"...
Przypomina mi się jak ktoś z tego forum zgarnął 11k za dodanie primary keya do bazy, co przyspieszyło czas wykonywania skryptów z 2 godzin do 30 sekund. Rotfl...

0

Ja twórcą tego systemu nie jestem i nie ja projektowałem strukturę tabel.
W systemie znajduje się wiele nadmiarowych danych które bez sęsu są zbierane.
Nie mówiąc już o normalizacji tabel.

Czy częste aktualizowanie danych w tabeli może mieć wpływ na czas wykonywania się zapytań?

0

Jak odpowiesz na moje pytanie i podasz przyklad to masz szanse sie dowiedziec. Zalezy od zapytania update i kolejnych korzystajacych z danych w tej tabeli/tabelach.

0

Czy diagram err wystarczy ?

0

Nie. Zrozum, zapytanie update sklada sie z co najmniej kilku czesci:

update table
set kol1 = val1, kol2 = val2 //tutaj liczy sie czy na tych kolumnach sa indeksy lub triggery na bazie (obydwa zwalniaja)
where
kol3 = val3 and kol4 = val4 // tutaj liczy sie czy wiersze spelniajace te warunki beda szybko wyselekcjonowane, indeksy znacznie poprawiaja szybkosc tej czesci

Bez konkretnego zapytania mozna wrozyc. Generalnie bez indeksow baza zwykle ssie. Z za duza iloscia lub zle dobranymi tez ssie, bo przeszkadzaja. To nie musi byc prawdziwe zapytanie, jesli nie mozesz go ujawnic. Zamien nazwy kolumn na jakies sztuczne tylko opisz charakter danych w tabeli (ilosc, selektywnosc, rodzaj).

PS. Chodzilo o diagram ERD?

0

Dokładnie chodzi o diagram ERD.

Przygotouje zapytania ktore sie dlugo wykonuja.
I zamieszcze na forum.

A c z mechanizmem składowania danych w tabeli ma wpływ na szybkośc wykonywania zapytań?

0

ERD w polaczeniu z zapytaniami powinno wystarczyc. Co do mechanizmu skladowania to pewnie ma, ale z mysqlem mialem do czynienia dosc dawno, wiec musialbym doczytac ;) Jest paru innych na tym forum znajacych sie lepiej na tym aspekcie, wiec moze cos dodadza.

0

Dodałbym do tego jeszcze rodzaje komórek.
Bo jeśli ktoś trzyma np teksty do 150 znaków w TEXT, to niech się nie dziwi, że baza wolno działa. Zamiast tego lepiej by było użyć chociażby VARCHAR(150).

Ale co najważniejsze - jeśli całość działa szybko na innym serwerze, to główny błąd nie jest w bazie, a w serwerze.

0

Jesli nie ma indeksow, to stworzenie bazy od nowa moglo ja nieco posprzatac (w sensie defragmentacji) i przyspieszyc wykonanie zapytan.

@autor: w mysql jest zdaje sie polecenie EXPLAIN pokazujace plan wykonania zapytania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1