Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[MySQL] Alter table statements en table rebuilds

Pagina: 1
Acties:

  • 9900578Heck
  • Registratie: Juli 2001
  • Laatst online: 14-10-2022
Ik wil graag weten welke alter table statements zorgen voor een rebuild van de table.

Ik ben net ingestapt in een aantal jaren oud project en het eerste wat ik wilde was het documenteren van de database. Leuk allemaal, maar ik wil de comments op tables en columns natuurlijk ook de database induwen.

Het probleem is dat ik nergens kan vinden of een alter table statement wel of niet gaat leiden tot een rebuild van een MyISAM table.
Ik las ergens op http://www.mysqlperformanceblog.com dat een comment toevoegen niet leidt tot een rebuild, maar ik wil dat graag zeker weten voordat ik de productie site een paar uur plat leg voor het toevoegen van een stel comments ;)

De productieversie van MySQL die we gebruiken is 5.0.51

Kan iemand me vertellen hoe ik erachter kom in een niet productieomgeving wat wel en niet leidt tot een rebuild?

Alvast bedankt!

  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 10-10 19:12

_Sunnyboy_

Mooooooooooooooooo!

Hakan Küçükyılmaz van MySQL AB beantwoord een vergelijkbare vraag met:
currently an ALTER TABLE will cause the table in question to rebuild. This happens with InnoDB and with Falcon tables as well.
Misschien dat onderstaande pagina een workaround beschrijft?
http://www.mysqlperforman...line-for-certain-changes/

[ Voor 22% gewijzigd door _Sunnyboy_ op 21-06-2008 08:54 ]

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16:25

Creepy

Tactical Espionage Splatterer

En ander: test het gewoon. Zet een stuk van je productie omgeving over op je testomgeving en voeg de comment toe. Je ziet dan gelijk of er een rebuild plaats vindt.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • 9900578Heck
  • Registratie: Juli 2001
  • Laatst online: 14-10-2022
_Sunnyboy_ schreef op zaterdag 21 juni 2008 @ 08:53:
Hakan Küçükyılmaz van MySQL AB beantwoord een vergelijkbare vraag met:
Ik had dat gelezen, maar hij zegt er niets over MyISAM.
Dit was dus dat artikel dat ik bedoelde ;)
Er staat in dat artikel onderaan:
Table comment. I'm pretty sure that would work for changing table comment as well, however - changing a comment with a help of ALTER TABLE does not rebuild the table, so we better use the documented method for that.
Maar dit is de enige referentie ernaar die ik kan vinden, en dit soort zijdelingse referenties zijn me niet goed genoeg in dit geval :)

Bedankt voor beide links ;)
Creepy schreef op zaterdag 21 juni 2008 @ 09:20:
Je ziet dan gelijk of er een rebuild plaats vindt.
Dat lijkt mij ook de beste optie, maar hoe kan ik dat zien dan?

Het hebben van een testomgeving is iets dat er nog niet is. Wordt aan gewerkt, maar het project is een dusdanige cluster*beep* dat het wel even zal duren voor alles weer een beetje op de rails staat :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 16:25

Creepy

Tactical Espionage Splatterer

Het commando "show processlist" laat precies zien welke MySQL processen wat aan het doen zijn. Als er een table rebuild nodig is dan zie je dat dus staan.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • 9900578Heck
  • Registratie: Juli 2001
  • Laatst online: 14-10-2022
Tesjes gedaan. beide volgende statements leiden iig tot het rebuilden van de indexen. "Repair by sorting" is wat MyISAM weergeeft als het de indexen aan het rebuilden is.

de geteste statements (iemand nog een andere manier om een comment aan te passen?)
code:
1
alter table `user` modify column user_id int comment "yadda";

code:
1
alter table `user` change column user_id user_id int comment "yadda";


Show Processlist laat zien:
code:
1
2
3
4
Command: Query
Time: 4
State: Repair by sorting
Info: alter table `user` modify column user_id int comment "yadda"

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Alter table en het wijzigen van dit soort meta data zuigt gewoon in mysql. Het wordt allemaal op een behoorlijk naieve manier via rebuild gedaan.

Enige tip is wel dat als je enkel een kolom naam of default van een kolom wil wijzigen dit via '... | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}' kan zonder rebuild. Als je exact hetzelfde opschrijft met change of modify column heb je wel die rebuild te pakken.

Deze tip is te vinden op mysqlperformanceblog

[ Voor 17% gewijzigd door Voutloos op 22-06-2008 12:15 ]

{signature}

Pagina: 1