Skocz do zawartości


 

Zdjęcie

Mysql - tworzenie tabeli z selecta.

Mysql - tworzenie tabeli z selecta. mysql select

  • Proszę się zalogować aby odpowiedzieć
16 odpowiedzi na ten temat

Mysql - tworzenie tabeli z selecta.

#1 MrLei

MrLei

    Nowy użytkownik

  • Użytkownicy
  • 16 postów

Napisany 29 styczeń 2015 - 13:39

Mam problem z bazą mysql'a  gdy  tworze nową tabele z  selecta  innych 3 tabel.

Czas genrowanie tej tabeli jest  dla mnie do zaakceptowania. Problem dotyczy  blokowanie całej bazy  w tym czasie,   1,5 minuty  cała baza "zwisa" , stoi  i czeka aż sie  ten proces zakończy.  Tabele mam myisam.

 

Czy to poblem tabel  myisam? przy  innodB  było by tak samo?

 

   


  • 0

#2 xorg

xorg

    Webmaster & programista

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 2009 postów
  • Skąd:Łódź
  • Firma:Web Systems
  • Imię:Sebastian
  • Nazwisko:Bort

Napisany 29 styczeń 2015 - 14:46

Poczytaj o blokowaniu tabel w mysql to rozwiaze twoje watpliwosci


  • 0

#3 MrLei

MrLei

    Nowy użytkownik

  • Użytkownicy
  • 16 postów

Napisany 29 styczeń 2015 - 15:56

pocztałem zmieniłem na innodb .. i to samo.


  • 0

#4 xorg

xorg

    Webmaster & programista

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 2009 postów
  • Skąd:Łódź
  • Firma:Web Systems
  • Imię:Sebastian
  • Nazwisko:Bort

Napisany 29 styczeń 2015 - 16:31

 

pocztałem zmieniłem na innodb .. i to samo.

 

 

http://www.percona.c...-innodb-tables/

 

 

PS. A może brakuje Ci np. indeksów albo zapytanie może być lepiej zbudowane i dlatego zapytanie tak długo trwa?


Edytowany przez xorg, 29 styczeń 2015 - 16:34.

  • 0

#5 MrLei

MrLei

    Nowy użytkownik

  • Użytkownicy
  • 16 postów

Napisany 29 styczeń 2015 - 17:04

Problem nie jest długości zapytania tylko to że jeden select który tworzy  tabele  blokuje cała baze. 


  • 0

#6 ptrkchn

ptrkchn

    Nowy użytkownik

  • Użytkownicy
  • 8 postów

Napisany 01 luty 2015 - 21:17

Nie laduj danych na zasadzie insert info select from. Takie zapytania zawsze blokują tabelę. Jeżeli koniecznie musisz ładować dane w ten sposób, zastanów się nad stworzeniem widoku lub pomogę znaleźć ci inne rozwiązanie
  • 0

#7 ptrkchn

ptrkchn

    Nowy użytkownik

  • Użytkownicy
  • 8 postów

Napisany 02 luty 2015 - 07:27

Zresztą 1.5 minuty to i tak długo.jakie dokładnie zapytania tworzysz? Ile danych jest przerzucane?
  • 0

#8 Pan Kot

Pan Kot

    Mrrr

  • Zbanowani
  • PipPipPipPipPipPipPipPip
  • 2819 postów

Napisany 02 luty 2015 - 08:49

Jest kilka możliwości.

 

Możliwością samego SQLa jest tworzenie widoków.

 

Możliwością MySQLa jest użycie np. mysqldump'a, który robiąc kopię całej bazy (pliku), czy nawet pojedynczych tabel, działa o wiele szybciej niż robienie tego samego SQLem.

 

Za to najlepiej wyjdziesz jak zlokalizujesz bottlenecka. Najczęściej jest to I/O, w tym celu o wiele lepiej puścić mysqldumpa przez pipe'a do gzipa (mysqldump -h localhost ... | gzip > mojabza.sql.gz), bo oszczędzasz bardzo dużo danych, które musisz zapisać na dysk. W przypadku CPU, pomóc może założenie lepszych indeksów, dotweakowanie zmiennych serwera MySQL, i wiele innych rzeczy.


  • 0

#9 ptrkchn

ptrkchn

    Nowy użytkownik

  • Użytkownicy
  • 8 postów

Napisany 02 luty 2015 - 08:52

Dokładnie tak jak mówi Archi. Sprawdź też strukturę bazy - jeżeli potrzebujesz danych składowych z trzech innych tabel może się okazać, że logika którą podjales jest bez sensu. Być może w ogóle nie potrzebujesz czwartej tabeli.
  • 0

#10 Misiek08

Misiek08

    Weteran WHT

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 1157 postów

Napisany 02 luty 2015 - 17:11

Patrzę na Wasze wiadomości i zastanawiam się czemu tutaj poziom tak bardzo leży.

 

Porobiłem sobie testy na koncie hostingowym i zrobiłem bazę, zapytanie optymalne, ale dużo danych. Baza zanim przemieliła z kilku tabel to po prostu chwilę pomyślała. Czy nie możecie zrozumieć, że autor ma:

- dobrą strukturę

- dobre zapytanie

- szybki serwer

?

 

Autor nie pyta o to jak zoptymalizować bazę, tylko o techniczne ograniczenia takiego zapytania.

 

Moja odpowiedź, żeby nie było offtop'a:

Topornym rozwiązaniem (jeżeli masz dużo danych w sensie ilości, a nie rozmiaru, to polecam skopiować używane tabele do nowej bazy, tam wykonać zapytanie i przerzucić dane do głównej bazy LUB postawić slave'a i na nim wykonać operację pobierając wynik jakimś językiem i wrzucając od razu do bazy macierzystej. Może też rozważ inny system bazodanowy, który będzie albo szybszy albo będzie miał możliwość wykonywania takich operacji bez blokad. Może map-reduce, czy coś.


  • 0

#11 ptrkchn

ptrkchn

    Nowy użytkownik

  • Użytkownicy
  • 8 postów

Napisany 02 luty 2015 - 17:38

Patrzę na Wasze wiadomości i zastanawiam się czemu tutaj poziom tak bardzo leży.

 

Porobiłem sobie testy na koncie hostingowym i zrobiłem bazę, zapytanie optymalne, ale dużo danych. Baza zanim przemieliła z kilku tabel to po prostu chwilę pomyślała. Czy nie możecie zrozumieć, że autor ma:

- dobrą strukturę

- dobre zapytanie

- szybki serwer

?

 

Autor nie pyta o to jak zoptymalizować bazę, tylko o techniczne ograniczenia takiego zapytania.

 

Moja odpowiedź, żeby nie było offtop'a:

Topornym rozwiązaniem (jeżeli masz dużo danych w sensie ilości, a nie rozmiaru, to polecam skopiować używane tabele do nowej bazy, tam wykonać zapytanie i przerzucić dane do głównej bazy LUB postawić slave'a i na nim wykonać operację pobierając wynik jakimś językiem i wrzucając od razu do bazy macierzystej. Może też rozważ inny system bazodanowy, który będzie albo szybszy albo będzie miał możliwość wykonywania takich operacji bez blokad. Może map-reduce, czy coś.

 

O rany, no niby tak, al. My chcemy od MrLei informacji, które pomogą nam dobrać odpowiednie warianty żeby "wyleczyć" jego problem i nie musiał wracać z tym na forum co tydzień.

 

Myślę, że temat powinien iść w tę stronę: MrLei, czy przerzucenie tych tabel jest jednorazowe, czy okresowe?

 


  • 0

#12 MrLei

MrLei

    Nowy użytkownik

  • Użytkownicy
  • 16 postów

Napisany 22 luty 2015 - 17:45

Dziękuje za  pomoc, każda pomoc nawet off topic może okazać się pomocna  :-) 

 

Tabel  którą robię to jest tabela " normalizacyjna"  czyli taka która właśnie składam z kliku table do jednej która ma  chodzić jako "frontend"  do szybkiego działania  głównych  zapytań oraz do zmniejszenia liczby rekordów i aby pozbyć się joinów.  

Tabela tworzona jest  cyklicznie co godzinę.  

Tabela po tworzeniu ma zakładane indexy tam gdzie są  wymagane od zapytań głównych na "frontendzie" 

Niestety  strukture bazy i logikę nie za bardzo chce zmieniać bo to jest aplikacja klienta robiona przez kogoś innego a  przebudowa  tak "głeboko" aplikacji  jest nie opłacalna.

          

   

   

 

 


  • 0

#13 MrLei

MrLei

    Nowy użytkownik

  • Użytkownicy
  • 16 postów

Napisany 22 luty 2015 - 18:23

Dodam jeszcze że  przerobiłem sprawę widoku w mysql ale efekt jest  gorszy od obecnego rozwiązania z select + create...       

 

Co do tabeli,  która tworze to blokowanie tej tabeli nie jest problem  gdyż do tego mam ustawione  działanie tabel na przemiennie czyli  jeśli jest tworzona tabela nowa "a"  to frontend dział obecnie na tabeli "b" i odwrotnie.

 

Będę testował scenariusz taki  że zbuduje slave  tylko z tabel potrzebnych do  budowy tabli nowej.

Na slave będe robił nowa tabel  i potem  ją wsadzał do mastera.

 

 


Edytowany przez MrLei, 22 luty 2015 - 18:31.

  • 0

#14 Misiek08

Misiek08

    Weteran WHT

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 1157 postów

Napisany 23 luty 2015 - 00:58

Toporne, ale slave może stać zablokowany, a wrzucasz nową tabelę na master i aplikacja może jej używać.

Możesz powiedzieć co to są za dane konkretniej?
  • 0

#15 MrLei

MrLei

    Nowy użytkownik

  • Użytkownicy
  • 16 postów

Napisany 23 luty 2015 - 11:05

Toporne to fakt...  ale  slave chcę zrobię tylko do budowania tabeli "normalizacyjne"  po to aby to ona była właśnie tylko obciążana.

 

Typ danych tabel, ta największa ma 152 pola różnych typów varchar,  int, mediumtext,  enum , data, datetime, double, set.

 

 

 

 

  

 


  • 0

#16 Misiek08

Misiek08

    Weteran WHT

  • WHT Pro
  • PipPipPipPipPipPipPipPip
  • 1157 postów

Napisany 23 luty 2015 - 22:38

Sam to zaproponowałem, ale wiem, że można to tak zrobić stąd mój pomysł. Na pewno są jakieś sposoby na wykonanie takiego zapytania bez blokad i robienia slave, ale nikt ich tutaj nie chce przedstawić, a znanym nam sposobem powinno śmigać.


  • 0

#17 MrLei

MrLei

    Nowy użytkownik

  • Użytkownicy
  • 16 postów

Napisany 24 luty 2015 - 10:53

Sam to zaproponowałem, ale wiem, że można to tak zrobić stąd mój pomysł. Na pewno są jakieś sposoby na wykonanie takiego zapytania bez blokad i robienia slave, ale nikt ich tutaj nie chce przedstawić, a znanym nam sposobem powinno śmigać.

 

Tak wiem i dziękuje bardzo :-)

Też właśnie liczyłem że ten problem ma inne rozwiązanie. 


  • 0






Także otagowane jednym lub więcej z tych słów kluczowych: mysql, select

0 użytkowników czyta ten temat

0 użytkowników, 0 gości, 0 anonimowych użytkowników